java中向文件末尾追加内容需使用append=true参数:filewriter(简单但编码受限)、fileoutputstream+outputstreamwriter(推荐,支持utf-8等编码)、files.write(java 7+,需指定create和append选项)。

在 Java 中向文件末尾追加内容,关键在于使用带 append = true 参数的输出流,避免覆盖原有内容。
用 FileWriter 追加文本(简单直接)
FileWriter 默认会覆盖文件,但传入 true 作为第二个参数即可启用追加模式:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 代码示例:
try (FileWriter fw = new FileWriter("log.txt", true)) {
fw.write("新日志:操作成功\n");
} - 注意:FileWriter 使用平台默认编码,若需指定编码(如 UTF-8),建议改用 OutputStreamWriter + FileOutputStream(见下条)
- 每次写入后记得换行(
\n),否则内容会连成一行
用 FileOutputStream + OutputStreamWriter 追加(推荐,可控性强)
这种方式能明确指定字符编码,也支持追加,更健壮:
- 代码示例:
try (FileOutputStream fos = new FileOutputStream("data.txt", true);
OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
osw.write("中文内容追加成功\r\n");
} -
FileOutputStream的true参数开启追加;OutputStreamWriter负责按指定编码转换字符 - Windows 建议用
\r\n换行,跨平台可用System.lineSeparator()
用 Files.write() 追加(Java 7+,简洁但需注意)
Files 工具类适合一次性写入字符串或字节,追加需显式指定 StandardOpenOption.APPEND:
- 代码示例:
Listlines = Arrays.asList("第2行", "第3行");
Files.write(Paths.get("notes.txt"), lines, StandardCharsets.UTF_8,
StandardOpenOption.CREATE, StandardOpenOption.APPEND); - 必须同时传
CREATE(文件不存在时创建)和APPEND(追加写入) - 不自动换行,每行需自己加
\n;若只写一行字符串,可用Files.writeString()(Java 11+)
注意事项和常见问题
- 追加模式对**已存在的文件有效**;如果文件不存在,FileWriter 或 FileOutputStream 会自动创建,无需额外处理
- 多线程并发追加同一文件时,Java 不保证线程安全 —— 需自行加锁或使用
FileChannel配合FileLock - 不要混用读写流(如边读边 FileWriter 追加),容易因缓冲或文件指针导致意外行为
- 日志类场景建议用 Log4j、SLF4J 等框架,它们内置了安全、异步、滚动追加等能力
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










