java中向文件追加内容需启用append模式:filewriter("f",true)、fileoutputstream("f",true)+outputstreamwriter、files.write(...,append,create);注意换行、编码和线程安全。

在 Java 中向已有文件追加写入内容,关键在于使用带有 append = true 参数的构造方式,确保不会覆盖原文件,而是将新内容添加到末尾。
使用 FileWriter(字符流,适合文本)
FileWriter 是最常用的方式之一,适用于写入字符串等文本内容。必须显式传入 true 作为第二个参数,启用追加模式:
- 不传或传
false:默认覆盖写入(清空原文件再写) - 传
true:定位到文件末尾,追加内容
示例代码:
try (FileWriter fw = new FileWriter("log.txt", true)) {
fw.write("【INFO】操作完成\n");
}
使用 FileOutputStream + OutputStreamWriter(更灵活的字符写入)
当需要控制编码(如 UTF-8)、或底层是字节流场景时,推荐组合使用:FileOutputStream(开启 append 模式)+ OutputStreamWriter(指定编码):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
new FileOutputStream("data.txt", true)启用追加 -
OutputStreamWriter包装它,并指定字符编码,避免乱码
示例:
try (FileOutputStream fos = new FileOutputStream("data.txt", true);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8")) {
osw.write("新增一行中文内容\n");
}
使用 Files.write(Java 7+,简洁但需注意)
Files.write() 默认是**覆盖写入**,不能直接追加。但可通过传入 StandardOpenOption.APPEND 实现:
- 必须同时指定
CREATE(文件不存在时自动创建) - 可选加
StandardOpenOption.WRITE,但 APPEND 已隐含 WRITE
示例:
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
List<string> lines = Arrays.asList("第2行", "第3行");
Files.write(Paths.get("notes.txt"), lines, StandardCharsets.UTF_8,
StandardOpenOption.CREATE, StandardOpenOption.APPEND);</string>
注意事项
- 追加写入不会自动换行,需手动加
\n或System.lineSeparator() - 多线程并发写同一文件时,需自行加锁(如
synchronized或ReentrantLock),否则内容可能错乱 - 小量日志建议用
FileWriter;高频/多线程/大日志场景,推荐用Log4j、SLF4J等专业日志框架
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










