bufferedwriter 的 newline() 方法自动写入系统换行符(windows 为\r\n,linux/macos 为\n),需在 write 后显式调用,且须 flush 或 close 才生效;相比硬编码\n,newline() 具备跨平台兼容性。

Java 中 BufferedWriter 的 newLine() 方法会自动写入当前操作系统对应的换行符(如 Windows 用 \r\n,Linux/macOS 用 \n),无需手动指定,只要调用它即可。
确保正确调用 newLine()
newLine() 不会自动追加到前一行末尾,它只输出换行符本身。所以你需要在写完一行内容后显式调用它:
- 先用
write(String)或write(int)写入内容 - 再调用
newLine()换行 - 不能只调用
newLine()而不写内容,否则会多出空行
必须配合 flush() 或 close() 才能真正写出
BufferedWriter 是带缓冲的,newLine() 只是把换行符写入缓冲区,不会立即落盘:
- 调用
flush()强制刷新缓冲区,把包括换行符在内的所有内容写入底层流 - 调用
close()也会自动 flush,但之后不能再写 - 忘记 flush 或 close 可能导致最后一行(含换行)没写入文件
完整示例(推荐 try-with-resources)
以下代码安全、简洁,自动处理关闭和换行:
<font size="2"><pre class="brush:php;toolbar:false;">try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("第一行");
writer.newLine(); // 写入系统换行符
writer.write("第二行");
writer.newLine();
// 不需要显式 flush — close 时自动 flush
}
运行后,文件中两行之间使用的是当前系统的标准换行符,跨平台可移植。
注意:newLine() 和 \n 的区别
直接写 "\n" 是固定换行符,不是系统无关的:
-
write("\n")在 Windows 上仍只写\n,可能被某些程序识别为“无回车”,显示异常 -
newLine()查看System.getProperty("line.separator"),返回正确的本地换行序列 - 除非明确要求统一格式(如 HTTP 协议必须用
\r\n),否则优先用newLine()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











