java字符流不自动转换换行符,但通过bufferedwriter.newline()、bufferedreader.readline()和system.lineseparator()可跨平台可靠处理:newline()自动写入系统原生换行符,readline()自动识别并剥离 、 、 ,system.lineseparator()用于字符串拼接或标准化。

Java 字符流本身不自动转换换行符,但配合标准 API 就能可靠应对跨平台差异——关键不是手动识别系统,而是用对方法。
优先使用 BufferedWriter.newLine()
这是最直接、最安全的方式。newLine() 方法内部自动调用 System.lineSeparator(),写入当前 JVM 所在系统的原生换行符:
- Windows 下写入
- Linux/macOS 下写入
- 无需判断系统类型,也不依赖字符串拼接
示例:
try (BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"))) {
bw.write("第一行");
bw.newLine(); // ✅ 自动适配
bw.write("第二行");
bw.newLine();
}
读取时靠 BufferedReader.readLine() 自动兼容
readLine() 方法会识别并剥离所有常见换行序列(
、
、
),统一返回不含换行符的字符串:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 无论文件是 Windows 生成的(含
)还是 Linux 生成的(含),都能正确分段 - 返回结果里不会残留
,避免后续处理时出现覆盖或乱码
注意:readLine() 不保留原始换行符,如需保留原始格式(比如复制文件),应改用字节流或手动解析。
字符串拼接或生成内容时,用 System.lineSeparator()
当需要构造多行文本(如日志、配置内容、HTTP 响应体等),不要硬写 "
" 或 "
":
- 推荐声明为静态常量:
private static final String NL = System.lineSeparator(); - 拼接时用
String.join(NL, lines)或lines.stream().collect(Collectors.joining(NL)) - 避免用
+=循环拼接,既低效又易出错
替换已有换行符时,用正则匹配所有可能形式
若需清洗或标准化输入文本(比如用户粘贴、网络接收的字符串),应同时处理多种换行符:
- 统一替换为当前系统换行符:
text.replaceAll("[\r\n]+", NL) - 仅移除换行符:
text.replaceAll("[\r\n]", "") - 注意
[\r\n]+能覆盖、、等异常组合
不建议用 replace("
", NL) 单独替换,它无法处理 Windows 文件中带
的情况,容易残留回车符导致显示异常。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










