Java中FileWriter为何多数情况失效,偶尔又能正常工作?
问题原因分析
核心问题出在FileWriter的路径参数错误:
你创建的File对象明确指向d:\test_appendfile.txt,但初始化FileWriter时却用了file.getName()——这个方法只会返回文件名test_appendfile.txt,不带完整路径。这就导致FileWriter实际是在程序当前的工作目录下创建或写入文件,而不是你预期的D盘根目录。
至于偶尔能成功的情况,只有当程序运行时的当前工作目录恰好是d:\时,写入的文件才会和你查看的d:\test_appendfile.txt是同一个,这时候你才能看到内容;其余时候,内容都写到了当前工作目录下的同名文件里,你去D盘根目录自然找不到。
修复方案
把FileWriter的参数改成带完整路径的File对象,或者直接传入完整路径字符串即可:
// 方式1:直接使用已创建的File对象(推荐) FileWriter fileWritter = new FileWriter(file, true); // 方式2:直接传入完整路径字符串 FileWriter fileWritter = new FileWriter("d:\\test_appendfile.txt", true);
另外,建议改用try-with-resources语法自动管理流资源,避免手动调用close()可能带来的资源泄漏问题:
public static void main(String[] args) { String content = "hello"; File file = new File("d:\\test_appendfile.txt"); try { if (!file.exists()) { file.createNewFile(); } // try-with-resources会自动关闭流 try (FileWriter fileWritter = new FileWriter(file, true)) { fileWritter.write(content); } } catch (IOException e) { e.printStackTrace(); } }
内容的提问来源于stack exchange,提问作者user19470144
相关产品推荐
相关产品推荐

