求助:FileWriter无法将内容写入文件且无报错
解决FileWriter无法写入文件的问题
哦,这个问题我之前帮好几个开发者排查过,咱们先拆解你代码里的核心问题:
问题根源分析
你的代码里有两个关键问题导致内容没成功写入文件:
- 每次循环都新建FileWriter实例:
FileWriter的默认构造器是覆盖模式,每次创建新对象都会清空目标文件的原有内容。更重要的是,你没调用close()或flush()——FileWriter内部带缓冲区,不手动刷新/关闭的话,缓冲区内容不会真正写到磁盘,程序结束时可能还没完成写入操作。 - 逻辑漏洞:当输入
stop时,代码依然会执行fw.write("\n"),不仅会多写空行,而且因为每次循环都新建FileWriter,最后这次写入也大概率没被刷入磁盘。
修正后的代码
推荐用Java 7+支持的try-with-resources语法,它会自动关闭资源,不用手动调用close(),安全又省心:
import java.util.Scanner; import java.io.FileWriter; import java.io.IOException; public class FileReadLine { public static void main(String[] args) { // try-with-resources自动管理资源,无需手动close try (Scanner sc = new Scanner(System.in); FileWriter fw = new FileWriter("C:/test/abcd.txt", true)) { // 第二个参数true启用追加模式 String str; do { System.out.println("Enter your lines"); str = sc.nextLine(); if (!str.equals("stop")) { fw.write(str); fw.write("\n"); // 仅在输入有效内容时写入换行 } } while (!str.equals("stop")); } catch (IOException e) { e.printStackTrace(); // 打印异常信息,方便排查目录不存在等问题 } } }
关键修改点说明
- 将FileWriter移到循环外并启用追加模式:
new FileWriter("路径", true)的第二个参数true让写入变为追加模式,不会覆盖原有内容,而是在文件末尾添加新内容。 - 使用try-with-resources:确保
FileWriter和Scanner在代码块结束后自动关闭,强制刷新缓冲区内容到磁盘,彻底避免内容丢失。 - 调整换行写入逻辑:只有输入内容不是
stop时才写入换行,避免最后多出来的空行。
另外要确认C:/test/目录是否存在,如果不存在FileWriter会抛出IOException——之前的代码可能因为catch块没打印异常所以没发现,记得保留异常打印,方便快速定位问题~
内容的提问来源于stack exchange,提问作者coc champ
相关产品推荐
相关产品推荐

