filewriter自jdk 11起支持同时指定字符编码和追加模式,构造方法为new filewriter(string, boolean, charset);jdk 8及以前需用outputstreamwriter包装fileoutputstream实现。

Java 中 FileWriter 配置字符编码和追加写入模式是两个独立但常一起使用的功能。JDK 11 起,FileWriter 原生支持指定 Charset;而追加模式通过构造方法的 boolean 参数控制。两者可同时启用,但需注意:**追加模式不改变编码行为,编码需单独显式指定**。
一、追加写入模式怎么设置
只需在构造 FileWriter 时传入 true 作为第二个参数:
-
new FileWriter("data.txt", true)—— 文件存在则追加,不存在则创建后写入 -
new FileWriter(new File("log.log"), true)—— 使用 File 对象 + 追加模式 - 默认(无 append 参数或 false)为覆盖模式,会清空原文件内容
二、字符编码怎么指定(JDK 11+ 推荐方式)
直接使用带 Charset 的构造方法,避免平台默认编码导致中文乱码:
new FileWriter("notes.txt", StandardCharsets.UTF_8)-
new FileWriter(file, Charset.forName("GBK"))(兼容旧写法) - 推荐用
StandardCharsets.UTF_8,类型安全、无拼写错误风险
三、同时启用追加 + 指定编码(JDK 11 及以上)
FileWriter 提供了支持 append 和 charset 的重载构造方法:
-
new FileWriter("out.txt", StandardCharsets.UTF_8)→ 覆盖 + UTF-8 -
new FileWriter("out.txt", true, StandardCharsets.UTF_8)→ 追加 + UTF-8 ✅ - 该构造方法自 JDK 11 引入,无需额外包装 OutputStreamWriter
四、JDK 8 及更早版本的兼容方案
若项目受限于 JDK 8,FileWriter 不支持直接传 Charset,需组合 OutputStreamWriter:
- 先创建
FileOutputStream(支持 append) - 再套一层
OutputStreamWriter并指定编码 - 最后包装成
BufferedWriter提升性能 - 示例:
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt", true), "UTF-8"))
实际开发中,优先升级到 JDK 11+,用 FileWriter(String, boolean, Charset) 最简洁可靠。编码和追加都配对明确,不易出错。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











