java 中使用 files 类追加写入内容,核心是调用 files.write() 方法并传入 standardopenoption.append 选项。该操作会定位到文件末尾进行写入,若文件不存在则会自动创建新文件。使用此方法时需注意,它不会自动在每次写入后添加换行符,且默认行为是覆盖现有内容,因此必须显式指定追加模式。

Files.write() 的默认行为与追加模式的差异是什么
如果不指定任何打开选项,Files.write() 默认使用 StandardOpenOption.WRITE 和 StandardOpenOption.TRUNCATE_EXISTING,这会导致文件原有内容被清空。要保留原内容并追加,必须显式加入 APPEND 选项。此外,如果希望确保数据真正落盘,可以结合 SYNC 或 DSYNC 选项,但这会影响性能。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;
public class AppendExample {
public static void main(String[] args) throws Exception {
Path path = Paths.get("test.txt");
// 假设 test.txt 已存在且有内容
List<string> lines = List.of("Line 1", "Line 2");
// 追加写入多行
Files.write(path, lines, StandardCharsets.UTF_8,
StandardOpenOption.CREATE,
StandardOpenOption.APPEND);
}
}</string>
运行结果:文件 test.txt 末尾会增加两行文本,原有内容保持不变。
如何确保追加写入时的字符编码正确
在 Java 9 及以上版本中,Files.write() 提供了重载方法,允许直接指定 Charset 参数。如果不指定编码,将使用系统默认编码,这在跨平台环境下可能导致乱码。建议始终显式指定 StandardCharsets.UTF_8 以保证一致性。对于单行字符串追加,可以使用 Files.writeString() 方法,它同样支持追加选项和编码设置。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.nio.charset.StandardCharsets;
public class AppendWithEncoding {
public static void main(String[] args) throws Exception {
Path path = Paths.get("test_utf8.txt");
String content = "中文测试内容";
// 使用 UTF-8 编码追加单行
Files.writeString(path, content + System.lineSeparator(),
StandardCharsets.UTF_8,
StandardOpenOption.CREATE,
StandardOpenOption.APPEND);
}
}
运行结果:文件以 UTF-8 编码追加一行包含中文字符的内容,避免乱码问题。
当文件路径不存在且未设置 CREATE 选项时会发生什么
如果在调用 Files.write() 时未指定 StandardOpenOption.CREATE,而目标文件路径不存在,程序将抛出 java.nio.file.NoSuchFileException。这是因为 APPEND 选项仅作用于已有文件的末尾,无法自动创建新文件。因此,在生产环境中,通常建议同时使用 CREATE 和 APPEND,以确保文件存在性检查和追加操作的原子性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











