推荐使用 files.write()(jdk 7+)或 bufferedwriter 配合 outputstreamwriter,务必指定 utf-8 编码、正确处理异常与资源关闭;files.write() 简洁安全,适合单次写入;bufferedwriter 更灵活,适合多次动态写入。

Java 中写入字符串到文本文件,最常用且推荐的方式是使用 Files.write()(JDK 7+)或 BufferedWriter 配合 FileWriter / OutputStreamWriter。关键在于选择合适的方式、指定正确的字符编码(如 UTF-8),并正确处理异常和资源关闭。
用 Files.write() 一行搞定(推荐新手)
这是最简洁安全的方式,自动处理编码和资源关闭,适合写入单个字符串或字符串列表:
- 写入单个字符串(覆盖原文件):
Files.write(Paths.get("output.txt"), "你好,世界!".getBytes(StandardCharsets.UTF_8)); - 写入字符串并换行(追加需加
StandardOpenOption.APPEND):Files.write(Paths.get("log.txt"), List.of("第1行", "第2行"), StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.WRITE); - 注意:默认会覆盖文件;如需追加,必须显式传入
StandardOpenOption.APPEND。
用 BufferedWriter 逐行写入(适合大文件或动态内容)
当需要多次调用 write()、频繁写入、或控制换行细节时,BufferedWriter 更灵活高效:
- 务必用 try-with-resources 自动关闭流,避免资源泄漏:
try (BufferedWriter writer = Files.newBufferedWriter(Paths.get("data.txt"), StandardCharsets.UTF_8)) {<br> writer.write("姓名:张三");<br> writer.newLine(); // 写入系统换行符<br> writer.write("年龄:25");<br>} - 不要用
FileWriter直接构造(它不支持指定编码,依赖平台默认编码,易乱码)。 -
newLine()比手动写"\n"更跨平台。
常见错误与避坑提醒
写入失败或乱码,往往源于这几个细节:
-
编码没指定:所有涉及字符的 API(如
FileWriter、OutputStreamWriter)必须显式传入StandardCharsets.UTF_8,否则 Windows 上可能用 GBK,Linux/macOS 用 UTF-8,导致乱码。 -
忘记刷新或关闭:用
BufferedWriter时,若不用 try-with-resources,必须手动调用flush()和close(),否则内容可能滞留在缓冲区未写出。 -
路径不存在时报 IOException:父目录不存在时
Files.write()会直接抛异常;可提前用Files.createDirectories()创建完整路径。
小结:按场景选方式
写少量内容、脚本式操作 → 用 Files.write();
需多次写、加日志、控制格式 → 用 BufferedWriter + try-with-resources;
要兼容老 JDK(OutputStreamWriter 包装 FileOutputStream,同样注意编码和关闭。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











