使用BufferedWriter高效写入多行数据的关键是依靠缓冲减少系统调用,正确构造(显式指定UTF-8编码)、逐行write+newLine、及时flush和close,避免拼接字符串或依赖默认编码。

用 BufferedWriter 快速写入多行数据,核心是“靠缓冲减少系统调用”,而不是拼大字符串或逐个 write() 小碎片。关键不在“怎么写”,而在“怎么组织写”和“怎么确保落盘”。
用对构造方式:包一层 FileWriter,别裸用
BufferedWriter 本身不直接连文件,必须包装一个底层 Writer(通常是 FileWriter)。推荐显式指定编码,避免平台默认导致乱码:
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt"), StandardCharsets.UTF_8))- 或者更简洁:
new BufferedWriter(Files.newBufferedWriter(Paths.get("out.txt"), StandardCharsets.UTF_8))(JDK7+,自动处理编码与异常) - 避免只写
new BufferedWriter(new FileWriter("out.txt"))——它用系统默认编码,Windows 上可能是 GBK,跨平台易出错
写多行的正确姿势:循环 write + newLine,别拼接
不要把所有行先 String.join("\n", lines) 拼成一个超长字符串再 write()。这会失去缓冲优势,还可能因换行符错乱导致 Windows 上显示为一行。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- ✅ 推荐写法:
for (String line : lines) {
bw.write(line);
bw.newLine();
} - ❌ 避免:
bw.write(String.join("\n", lines)); // 换行符硬编码,跨平台失败 - ⚠️ 注意:
newLine()自动用System.lineSeparator(),Windows 是\r\n,Linux/macOS 是\n,安全可靠
必须主动 flush 和 close,否则内容可能丢失
BufferedWriter 不会在写满前自动刷盘,JVM 退出也不保证帮你刷完。常见“文件为空”或“只写了一半”,基本都是漏了 flush() 或 close()。
- 写完全部内容后,按顺序执行:
bw.flush();→ 确保缓冲区数据写出bw.close();→ 关闭流(close 内部也会 flush,但异常时可能跳过) - 更稳妥写法(推荐):
try (BufferedWriter bw = ...) {
// 写入逻辑
} // 自动 flush + close - 如果中途需确保落盘(比如日志实时可见、断点续传),在关键位置加
bw.flush()
缓冲区大小不用乱调,默认 8KB 够用
默认缓冲区 8192 字符(约 8KB)已适配大多数场景。除非你确认单行数据经常超过 4KB,否则别轻易改大小。
- 缓冲区过大 → 内存占用高,崩溃时丢失更多数据
- 缓冲区过小 → 频繁触发 flush,抵消缓冲价值
- 真要调:构造时传第二个参数,如
new BufferedWriter(writer, 16384)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










