我的程序接受一个文本文件的输入,其中每个单词用换行符分隔,我的程序接受并处理数据,然后我需要输出到新文件,同时保持控制台输出。
现在我想知道为什么当我将“\ 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();
}
答案 0 :(得分:2)
因为在某些系统(Linux / Unix)上,新行定义为\n
,而在其他系统(Windows)上定义为\r\n
。根据阅读文本的软件,它可能选择坚持这个或更多的宽容"单独识别或\r
。
相关维基百科文字(https://en.wikipedia.org/wiki/Newline):
基于ASCII或兼容字符集的系统使用LF (换行,' \ n',0x0A,十进制10)或CR(回车,' \ r', 单独为0x0D,十进制为13,或CR后跟LF(CR + LF, ' \ r \ n',0x0D0A)
这就是为什么你可以像System
类一样从String
类中检索系统定义的行分隔符,而不是让它在url
类中保持一定的常量。
答案 1 :(得分:1)
System.getProperty("line.separator")
与"\n"
的不同之处在于前者返回OS行分隔符(并非总是\n
)。 \n
只是换行符,当您在不将\n
解释为新行的程序中打开输出文件时(例如,Windows上的记事本),您将无法看到新的线。