bufferedwriter写入换行需先write()再显式调用newline(),它自动适配系统换行符(windows为\r\n,linux/macos为\n),不接受参数且不自动换行;必须flush()或close()确保换行生效,推荐用try-with-resources自动管理。

Java 中用 BufferedWriter 带换行写入字符,核心是分开两步:先写内容,再调用 newLine()。它不自动换行,也不接受参数,但能跨平台输出正确的换行符(Windows 是 \r\n,Linux/macOS 是 \n)。
必须显式调用 newLine() 才会换行
write() 方法只负责写入字符,无论写的是字符串、字符数组还是单个字符,都不会附加任何换行。换行要靠单独一次 newLine() 调用:
- 写完一行内容后立即调用
newLine() - 不能只调用
newLine()而不写内容,否则文件里会出现空行 - 连续两次
newLine()会产生一个空行
换行符是系统自动适配的,不是固定 \n
直接写 write("\n") 在所有系统上都只输出 \n,而 Windows 记事本等工具可能无法正确识别为换行。而 newLine() 内部读取 System.lineSeparator(),运行在哪个系统就输出对应换行符:
- Windows 上输出
\r\n - macOS 或 Linux 上输出
\n - 无需硬编码,也无需判断操作系统
记得刷新或关闭,否则换行可能不生效
BufferedWriter 是带缓冲的,newLine() 只把换行符写进缓冲区,不会立刻写入文件:
- 调用
flush()强制把缓冲区内容(含换行符)写出 - 调用
close()会自动flush,之后不能再写 - 忘记
flush或close,最后一行(含换行)可能丢失
推荐写法:用 try-with-resources 自动管理
最安全简洁的方式是配合 try-with-resources,它会在退出时自动 close(),从而确保换行落盘:
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("第一行内容");
writer.newLine();
writer.write("第二行内容");
writer.newLine();
// 不需要手动 flush — close 时自动完成
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











