Files.write() 是 Java NIO 中写入文本的高效方式,支持多行列表(自动换行、UTF-8编码)和字节数组(需手动编码与换行),但不创建父目录,须显式指定 Charset 并合理使用 OpenOption。

Java NIO 的 Files.write() 是写入文本内容的高效方式,尤其适合一次性写入多行或字节数组。它比 writeString() 更底层、更灵活,但用法稍有区别——不能直接传字符串,需转为字节或行列表。
写入多行文本(最常用)
这是最直观、最安全的文本写入方式,自动换行、自动编码、自动创建文件:
- 传入
List<String>,每项作为一行,末尾自动加换行符(\n) - 默认使用 UTF-8 编码;如需其他编码,显式传入
StandardCharsets.GBK等 - 目标路径父目录不存在时会抛
NoSuchFileException,需提前创建
示例:
List<String> lines = List.of("姓名:张三", "年龄:28", "城市:杭州");
Path path = Path.of("info.txt");
Files.createDirectories(path.getParent()); // 确保父目录存在
Files.write(path, lines, StandardCharsets.UTF_8);
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
写入字节数组(兼容旧逻辑)
适用于已有 byte[]、或需精确控制编码/内容的场景:
- 字符串需先调用
.getBytes(Charset)转换,推荐用StandardCharsets.UTF_8 - 不会自动换行,换行符需手动拼在字符串里(如
"第一行\n第二行") - 默认行为是覆盖写入;追加需显式加
StandardOpenOption.APPEND
示例(追加写):
String content = "新增日志:" + LocalDateTime.now() + "\n";
Files.write(path, content.getBytes(StandardCharsets.UTF_8),
StandardOpenOption.CREATE, StandardOpenOption.APPEND);
注意几个关键细节
避免踩坑,重点看这三点:
-
父目录必须存在:
Files.write()不创建父目录,调用前务必执行Files.createDirectories(path.getParent()) -
中文不乱码的关键是显式指定 Charset:不要依赖平台默认编码,始终传
StandardCharsets.UTF_8(除非明确要求 GBK) -
追加写要配对使用选项:仅传
APPEND不够,还需CREATE(首次写)或WRITE(确保可写),否则可能报错
和 Files.writeString() 怎么选?
简单记:
- 写单个字符串(含换行符)→ 用
writeString(),代码更短 - 写多行、逐行可控、或已有 List → 用
write(List),语义清晰、不易出错 - 需要精确控制字节流、或与旧系统对接 → 用
write(byte[])

















