BufferedWriter 的 newLine() 方法自动使用系统默认换行符(如 Windows 为 \r\n,Linux/macOS 为 \n),通过 System.getProperty("line.separator") 获取,需配合 write() 使用且必须关闭流以确保写入。

Java 中 BufferedWriter 的 newLine() 方法会自动使用当前操作系统默认的换行符(如 Windows 用 \r\n,Linux/macOS 用 \n),因此无需手动指定,就能实现跨平台换行写入。
newLine() 的作用和原理
newLine() 并不是简单地写入 \n,而是调用 System.getProperty("line.separator") 获取系统属性定义的行分隔符,确保输出符合目标平台规范。它依赖 JVM 运行环境,而非源码编译环境。
基本使用方式
必须先调用 write() 写入内容,再调用 newLine() 换行;它本身不输出任何字符,只插入对应平台的换行序列。
- 需配合
try-with-resources或手动close(),否则缓冲区内容可能未真正写入文件 - 不能在未写入任何内容时单独调用
newLine()(虽不会报错,但逻辑上无意义) - 多次连续调用
newLine()会产生多行空行
典型代码示例
以下代码在任意系统运行,都会生成符合本地习惯的换行:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write("第一行");
bw.newLine(); // 插入系统默认换行符
bw.write("第二行");
bw.newLine();
}
生成的文件在 Windows 中显示为 第一行\r\n第二行\r\n,在 Linux 中为 第一行\n第二行\n。
注意事项与常见误区
newLine() 不是字符串方法,不能链式调用(如 bw.write("x").newLine() 会编译失败);也不能替代 \n 直接用于字符串拼接。
- 若用
println()(如PrintWriter),其内部也调用newLine(),效果一致 - 若需强制固定换行符(如生成 HTTP 响应头),应直接写
"\r\n",而不是依赖newLine() - 文本编辑器是否正确识别换行,取决于其自身对行结束符的支持,与
newLine()无关

















