2015-11-03 144 views
2

我的程序需要一個文本文件的輸入,每個文本文件都有一個由換行符隔開的單詞,我的程序會接收並處理數據,然後我需要輸出到一個新文件,同時保持控制檯輸出。爲什麼 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(); 
    } 
+1

因爲在某些系統上(比如OSX或Windows),'\ n'不是行分隔符? – 2015-11-03 17:47:53

+0

你應該使用'System.lineSeparator()'而不需要將結果轉換爲'String' –

回答

2

(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類中它有一些常量。

1

System.getProperty("line.separator")"\n"不同之處在於前者返回OS行分隔符(並非總是\n)。 \n只是一個換行符,當您在​​程序中打開輸出文件時,不會將\n解釋爲新行(例如Windows上的記事本),您將看不到該新行。

相關問題