为什么\ n和(String)System.getProperty(“line.separator”); 行为不同?

我的程序接受一个文本文件的输入,其中每个单词都用换行符分隔,我的程序接受并处理数据,然后我需要在保持控制台输出的同时输出到新文件。

现在我想知道为什么当我将“\ n”附加到我的stringBuilder时,它将它打印出来,因为它在控制台中有一个新行,但是在文件输出中,它不会将它作为一个新行而只是将所有单词放在一行中。

当我使用newLine时,它只在我的控制台输出和输出文件中给出一个新行。 这是为什么? (String)System.getProperty(“line.separator”)做了什么导致这个?

String newLine = (String)System.getProperty("line.separator"); try{ BufferedReader fileIn = new BufferedReader(new FileReader(fileName)); stringBuilder.append(newLine); while((s = fileIn.readLine()) != null){ stringBuilder.append(s); stringBuilder.append(newLine);//using newLine, } String a = stringBuilder.toString(); if(s== null){ fileIn.close(); } 

因为在某些系统(Windows)上,新行定义为\n而在其他系统(Linux / Unix)上定义为\r\r\n 。 根据阅读文本的软件,他们可能选择坚持这一点或更加“宽容”。

相关维基百科文本( https://en.wikipedia.org/wiki/Newline ):

基于ASCII或兼容字符集的系统分别使用LF(换行,’\ n’,0x0A,十进制10)或CR(回车符’,’\ r’,0x0D,十进制为13)或CR后跟LF(CR + LF,’\ r \ n’,0x0D0A)

这也是为什么你可以像你一样从System类中检索系统定义的行分隔符,而不是让它在String类中保持一定的常量。

System.getProperty("line.separator")"\n"不同之处在于前者返回OS行分隔符(并非始终为\n )。 \n只是一个换行符,当您在​​一个程序中打开输出文件时,如果没有将\n解释为新行(例如,Windows上的记事本),您将看不到该换行符。