BufferedWriter 的 newLine() 方法自动写入平台默认换行符(Windows 为 \r\n,Linux/macOS 为 \n),内部调用 System.lineSeparator(),跨平台安全;需在 write() 后调用并 flush 或 close。

Java 中 BufferedWriter 的 newLine() 方法会自动写入当前平台默认的换行符(如 Windows 用 \r\n,Linux/macOS 用 \n),无需手动指定,也不依赖系统属性或硬编码。
newLine() 是跨平台安全的
newLine() 内部调用 System.lineSeparator(),该方法返回 JVM 启动时识别的操作系统对应的换行序列。这意味着:
- 在 Windows 上运行时写入
\r\n - 在 Linux 或 macOS 上运行时写入
\n - 无需判断 OS,也不需自己拼接
\r\n或\n
正确使用方式
确保 newLine() 在 write() 或 append() 之后调用,并注意刷新缓冲区:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 先写内容,再调用
newLine() - 操作完成后调用
flush()或close()(后者隐含 flush) - 不要混用
newLine()和手动写"\n",否则可能产生双换行
try (BufferedWriter writer = new BufferedWriter(new FileWriter("out.txt"))) {
writer.write("第一行");
writer.newLine(); // ✅ 自动适配平台
writer.write("第二行");
writer.newLine();
} // close() 自动 flush,换行已生效
避免常见误区
以下做法容易导致换行不一致或乱码:
立即学习“Java免费学习笔记(深入)”;
- 用
write("\n")或write("\r\n")替代newLine()—— 失去跨平台性 - 忘记调用
newLine(),仅靠write("xxx\n")—— 换行符固定,非平台适配 - 未关闭或刷新流,导致最后一行换行未写出
如果必须指定换行符(极少数场景)
一般不需要,但若明确要求统一为 \n(如生成 HTTP 响应、JSON 行格式等),可直接写字符串:
- 用
writer.write("\n")或writer.append("\n") - 注意这不是跨平台方案,需业务确认兼容性
- 此时不再调用
newLine(),避免重复换行

















