java - 尝试使用 Buffered Writer 将文件保存在文档文件夹中不起作用
问题描述
我正在尝试将用户输入保存到一个 .txt 文件中,该文件应该存储在文档文件夹中名为“ht”的文件夹中,但事实并非如此。注意:当我直接保存到文档文件夹时,文件会被保存。
这是我的代码:
public void saveUserData() throws IOException {
// Path path = Paths.get(filename);
Path path = Paths.get(FileSystemView.getFileSystemView().getDefaultDirectory().getPath()+"\\"+"ht"+"\\"+filename);
BufferedWriter bw = Files.newBufferedWriter(path);
try {
Iterator<FormInput> iter = dataItems.iterator();
while (iter.hasNext()) {
FormInput item = iter.next();
bw.write(String.format("%s\t%s",
item.getUserName(),
item.getPassword()));
bw.newLine();
}
} finally {
if (bw != null) {
bw.close();
}
}
}
解决方案
避免手动连接路径。它很容易出错,并且您可能会弄乱由不同操作系统引起的复杂性。
您已经在使用 Java 的Path
api,它有一个采用 varargs: 的便捷方法Paths.get(String first, String... more)
。因此,将其更改为:Paths.get(System.getProperty("user.home"), "ht", fileName)
现在,FileSystemView
是Swing
试图启动 GUI 并卡住的 api。我已将其替换为System.getProperty("user.home")
.
- 更新 -
如果目录不存在:
Path dir = Paths.get(System.getProperty("user.home"), "ht");
if (!Files.exists(dir)) {
Files.createDirectories(dir);
}
推荐阅读
- android - Android不会自动备份sharedprefs?
- awk - AWK 在条件下使用 gsub
- vba - 如何使用 VBA 代码从 ms-project 的另一列中的文本自动添加文本
- php - 在 php 的数组中打印 3 个或多个连续符号
- azure-active-directory - 无法从以下位置获取配置:'https://login.microsoftonline.com/
- anaconda - Anaconda 无法安装 subprocess32
- python - 使用 python 将任务添加到任务调度程序
- javascript - 如何将 JavaScript 变量传递给 PHP?
- mongodb - 在mongodb聚合中将两个集合合并为一个
- laravel - 如何确保哨兵正在捕获我的异常?