如何在Java中规范化EOL字符?

2022-09-01 00:51:17

我有一个Linux服务器和许多具有许多操作系统的客户端。服务器从客户端获取输入文件。Linux有line end of line char LF,而Mac有end of line char CR,Windows有end of line char CR+LF。

服务器需要将字符 LF 作为行尾。使用java,我想确保文件将始终使用linux eol char LF。我怎样才能实现它?


答案 1

你能试试这个吗?

content.replaceAll("\\r\\n?", "\n")

答案 2

结合两个答案(由Visage和eumiro提供):

编辑:阅读评论后。System.getProperty(“line.separator”)没有用。
在将文件发送到服务器之前,打开它以替换所有 EOL 并写回
确保使用 DataStreams 执行此操作,并以二进制文件
写入

String fileString;
//..
//read from the file
//..
//for windows
fileString = fileString.replaceAll("\\r\\n", "\n");
fileString = fileString.replaceAll("\\r", "\n");
//..
//write to file in binary mode.. something like:
DataOutputStream os = new DataOutputStream(new FileOutputStream("fname.txt"));
os.write(fileString.getBytes());
//..
//send file
//..

该方法有两个参数,第一个是要替换的字符串,第二个是替换。但是,第一个被视为正则表达式,因此,以这种方式解释。所以:replaceAll'\'

"\\r\\n" is converted to "\r\n" by Regex
"\r\n" is converted to CR+LF by Java

推荐