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

时间:2015-11-03 17:46:15

标签: java string io system stringbuilder

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

现在我想知道为什么当我将“\ 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();
     }

2 个答案:

答案 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上的记事本),您将无法看到新的线。