FileWriter用于字符写入,默认覆盖模式,传入true启用追加;推荐try-with-resources自动关闭;注意编码依赖系统、需手动创建父目录、换行用System.lineSeparator()。

Java 中使用 FileWriter 写入字符到文本文件,核心是创建 FileWriter 实例、调用 write() 方法写入内容、最后关闭流。它专用于字符写入(自动处理字符编码,默认使用平台默认编码),适合写纯文本。
基础写入:覆盖模式
默认情况下,FileWriter 以“覆盖”方式打开文件 —— 如果文件已存在,原有内容会被清空。
- 直接传入文件路径字符串即可创建:
FileWriter writer = new FileWriter("output.txt");
- 调用
write()写入字符串或字符数组:
writer.write("Hello, Java!");
writer.write("\nLine two.");
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 必须显式调用
close()才能确保内容真正写入磁盘:
writer.close();
追加写入:不覆盖原内容
如果希望在文件末尾添加内容(保留原文),需启用追加模式 —— 构造时传入第二个参数 true:
FileWriter writer = new FileWriter("output.txt", true);
writer.write("[APPENDED] New log entry.\n");
writer.close();
- 注意:追加只对文件末尾有效,不能插入到中间或开头
- 每次写入后建议换行,否则多条内容会连成一行
推荐写法:自动资源管理(try-with-resources)
手动 close 容易遗漏,导致资源泄漏或内容未刷新。Java 7+ 推荐用 try-with-resources 自动关闭:
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write("First line");
writer.write("\nSecond line");
} catch (IOException e) {
e.printStackTrace();
}
- 无论是否异常,
writer都会在 try 块结束时自动 close - 更安全、更简洁,是当前主流写法
注意事项与常见问题
-
编码不可控:FileWriter 默认用系统编码(如 Windows 是 GBK),跨平台可能乱码。若需指定编码(如 UTF-8),应改用
OutputStreamWriter + FileOutputStream -
不支持换行符抽象:
\n在 Windows 上显示为单换行,部分编辑器可能不识别。可使用System.lineSeparator()获取系统换行符 -
写入缓冲:内容先写入内存缓冲区,close 或 flush 后才落盘。频繁小写入时,可手动调用
writer.flush()强制刷新(但通常 close 已隐含 flush) -
路径不存在会报错:FileWriter 不会自动创建父目录。若
"logs/app.log"的logs目录不存在,会抛出FileNotFoundException,需提前用Files.createDirectories()创建

















