Java Files类提供简洁静态方法处理小文件读写:write()自动管理流和编码,readAllLines()一次性读取所有行返回List<String>;适用于几KB到几MB文件,大文件易OOM,需注意路径、目录、权限等边界情况。

Java 的 Files 类提供了简洁的静态方法,适合处理小文件(几 KB 到几 MB)的读写。其中 write() 和 readAllLines() 是最常用、最直接的组合——无需手动管理流、不用写 try-with-resources,代码干净,出错少。
用 write() 写入文本文件(自动换行需自己加)
Files.write() 接收路径、字节数组或字符串列表,底层自动处理编码和关闭流。注意:它默认不加换行符,若按行写入,得自己拼接 "\n" 或用 asList + 每行一个元素。
- 写单行字符串(UTF-8 编码):
Files.write(path, "Hello World".getBytes(StandardCharsets.UTF_8)); - 写多行(推荐方式):
Files.write(path, Arrays.asList("第一行", "第二行", "第三行"), StandardCharsets.UTF_8);
这会自动在每行末尾添加系统默认换行符(\n或\r\n)。 - 追加写入?加
StandardOpenOption.APPEND:Files.write(path, "新内容".getBytes(), StandardOpenOption.APPEND);
用 readAllLines() 一次性读取所有行(返回 List<String>)
readAllLines() 把文件按行读成 List<String>,每行不含换行符,编码默认 UTF-8,也可指定:
- 基础用法(UTF-8):
List<String> lines = Files.readAllLines(path); - 指定编码(如 GBK):
List<String> lines = Files.readAllLines(path, Charset.forName("GBK")); - 空文件或不存在?会抛
IOException(如NoSuchFileException),建议包裹 try-catch 或提前检查:if (Files.exists(path)) { ... }
组合使用:读 → 改 → 写(典型小文件编辑场景)
比如给每行开头加序号,再保存回去:
- List<String> lines = Files.readAllLines(path);
- List<String> newLines = new ArrayList<>();
for (int i = 0; i < lines.size(); i++) {
newLines.add((i+1) + ". " + lines.get(i));
} - Files.write(path, newLines); // 覆盖原文件
注意:这是“覆盖写”,不是“修改原文件”。如需保留原文件,先用 Files.copy(path, backupPath, REPLACE_EXISTING) 备份。
注意事项与边界情况
-
别用于大文件:
readAllLines()把全部内容载入内存,百 MB 文件易 OOM。 -
路径必须是 Path 对象:用
Paths.get("a.txt")转换字符串路径。 -
目录不存在会失败:写入前确保父目录存在,可用
Files.createDirectories(path.getParent())创建。 -
权限问题:Windows 下正在被其他程序打开的文件,
write()会抛AccessDeniedException。

















