FileWriter专用于字符写入,默认覆盖模式且自动处理编码,追加需传true参数;跨平台应改用OutputStreamWriter+FileOutputStream指定UTF-8;不可写二进制,换行用System.lineSeparator(),小量写入建议套BufferedWriter。

FileWriter 专门用于写入字符数据,使用它写入文本最直接、最常用。它内部自动处理字符编码(默认用系统默认编码,如 UTF-8 或 GBK),适合写字符串、中文等,不推荐写二进制内容。
基本写入方式(覆盖模式)
创建 FileWriter 对象时传入文件路径,它默认以“覆盖”方式打开文件——如果文件已存在,原有内容会被清空。
- 用 try-with-resources 自动关闭流,避免资源泄漏
- 调用 write(String) 或 write(char[]) 写入字符
- 写完后记得 flush()(但 try-with-resources 会自动 close,close 已隐含 flush)
示例:
try (FileWriter fw = new FileWriter("note.txt")) {
fw.write("你好,世界!\n");
fw.write("第二行内容。");
} catch (IOException e) {
e.printStackTrace();
}
追加模式写入
如果不想清空原文件,而是追加内容,创建 FileWriter 时传入第二个参数 true:
立即学习“Java免费学习笔记(深入)”;
- new FileWriter("log.txt", true) → 后续 write 都添加到文件末尾
- 适合日志记录、持续写入等场景
示例:
try (FileWriter fw = new FileWriter("log.txt", true)) {
fw.write("[INFO] 程序启动\n");
} catch (IOException e) {
e.printStackTrace();
}
指定字符编码(推荐显式设置)
FileWriter 默认用系统编码,跨平台易出乱码。若需稳定支持中文等,应改用 OutputStreamWriter + FileOutputStream 组合,并显式指定编码:
- FileWriter 本身不支持构造时传入编码,这是它的局限
- 可靠做法:new OutputStreamWriter(new FileOutputStream("a.txt", true), "UTF-8")
- 这样既能追加,又能确保 UTF-8 编码,中文不会乱码
注意点和常见问题
- FileWriter 是字符流,不能写 int、byte[] 等非字符类型(会转成对应 Unicode 码位,不是你想要的数值)
- 写入换行符建议用 System.lineSeparator(),而不是硬写 "\n",更兼容 Windows/Linux
- 频繁小量写入时,可包装为 BufferedWriter 提升性能:new BufferedWriter(fw)
- 路径中目录不存在会抛出 FileNotFoundException,需提前创建父目录(可用 file.getParentFile().mkdirs())


















