为什么\ 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上的记事本),您将看不到该换行符。