Java文件追加写入需显式启用append=true:FileWriter(file,true)或FileOutputStream(file,true);Files.write()须指定StandardOpenOption.APPEND;忽略true参数或未加换行符会导致覆盖或格式错误。

Java 中实现文件追加写入,关键是在创建 FileWriter 或 FileOutputStream 时传入 append = true 参数。默认情况下不启用追加模式,会覆盖原文件内容。
使用 FileWriter 追加写入(适合文本)
FileWriter 是处理字符流的常用类,适合写入字符串。启用追加需显式传入 true:
- 构造方法:
new FileWriter(file, true)—— 第二个参数为true表示追加 - 若文件不存在,会自动创建;若存在,则在末尾添加内容,不删除原有数据
- 注意编码问题:
FileWriter使用平台默认编码,建议改用OutputStreamWriter配合FileOutputStream显式指定 UTF-8
使用 FileOutputStream + OutputStreamWriter(推荐,可控性强)
更灵活、更安全的方式,可指定字符编码并确保追加行为明确:
- 先创建
FileOutputStream(file, true),第二个参数true启用追加 - 再包装成
OutputStreamWriter,指定编码如"UTF-8" - 最后用
BufferedWriter提升性能(可选但推荐) - 示例片段:
try (FileOutputStream fos = new FileOutputStream("log.txt", true);<br> OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");<br> BufferedWriter bw = new BufferedWriter(osw)) {<br> bw.write("新日志行");<br> bw.newLine(); // 换行,避免粘连<br>}
使用 Files.write(Java 7+,简洁但需注意)
Files.write() 默认是覆盖写入,**不支持直接追加**。但可通过组合方式实现:
立即学习“Java免费学习笔记(深入)”;
- 传入
StandardOpenOption.APPEND选项,例如:
Files.write(Paths.get("data.txt"), "追加内容\n".getBytes(StandardCharsets.UTF_8),<br> StandardOpenOption.CREATE, StandardOpenOption.APPEND); - 必须同时指定
CREATE(文件不存在时创建),否则抛异常 - 注意:每次调用都是独立写入,不维护打开状态,适合单次追加;高频写入建议用流式方式复用 writer
常见错误提醒
容易忽略的细节,导致“看似追加实则覆盖”:
- 忘记传
true参数,比如new FileWriter("a.txt")就是覆盖 - 用
Files.write()却没加APPEND选项,结果仍是覆盖 - 未调用
newLine()或手动加"\n",多行内容会挤在同一行 - 未关闭资源或未使用 try-with-resources,可能造成缓冲区未刷新、内容丢失


















