bufferedwriter 的 newline() 方法通过调用 system.lineseparator() 获取当前平台换行符(windows 为 \r\n,linux/macos 为 \n),实现跨平台;需配合 outputstreamwriter 指定字符集,避免手动写 \n 或 \r\n,并记得 flush() 和 close()。

BufferedWriter 的 newLine() 方法会自动写入当前运行平台的换行符,无需手动指定 \n 或 \r\n。
newLine() 为什么能跨平台
该方法内部调用 System.lineSeparator() 获取系统默认换行序列:Windows 返回 \r\n,Linux/macOS 返回 \n。只要 JVM 运行在目标平台上,写入的换行符就天然适配。
正确使用方式
确保 BufferedWriter 已正确包装 OutputStreamWriter(并指定字符集),然后直接调用 newLine():
- 不要混用
write("\n")或write("\r\n"),否则破坏跨平台性 - 每次需要换行时调用一次
newLine(),它不带参数、不返回值 - 写完后务必调用
flush()和close(),否则内容可能滞留在缓冲区
完整示例代码
// 推荐写法:自动适配平台
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("out.txt"), StandardCharsets.UTF_8))) {
writer.write("第一行");
writer.newLine(); // ✅ 正确:插入系统原生换行符
writer.write("第二行");
writer.newLine();
} catch (IOException e) {
e.printStackTrace();
}
注意点
如果文件需在特定平台打开(如必须 Windows 换行),而程序运行在 Linux 上,则 newLine() 不满足需求——此时应手动写 "\r\n",但这就不再是“跨平台”写入了。跨平台的核心是“运行在哪、适配哪”,不是“统一成某一种”。










