2010-11-01 100 views
5

我正在使用以下函數將字符串寫入文件。該字符串使用換行符格式化。Java:BufferedWriter跳過換行

例如,text = "sometext\nsomemoretext\nlastword";

我能看到的輸出文件的換行符,當我做:

type outputfile.txt 

然而,當我在記事本中打開文本我看不到換行。一切都顯示在一條線上。

爲什麼會發生這種情況。我如何確保正確寫入文本以便能夠在記事本中正確(格式化)地看到文本。

private static void FlushText(String text, File file) 
    { 
     Writer writer = null; 
     try 
     {   
      writer = new BufferedWriter(new FileWriter(file)); 
      writer.write(text); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       if (writer != null) 
       { 
        writer.close(); 
       } 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

回答

10

在Windows中,新的線被表示,按照慣例,作爲回車後跟一個換行(CR + LF),即\r\n

Newline wikipedia page

文本編輯器通常用於 轉換 不同換行符格式之間的文本文件;最現代的 編輯器可以使用至少不同的ASCII CR/LF 約定來使用 讀取和寫入文件。 編輯記事本標準Windows 不是其中之一 (雖然寫字板是)。

記事本應正確顯示輸出,如果你改變了字符串:

text = "sometext\r\nsomemoretext\r\nlastword"; 

如果你想代表新行的平臺無關的方式,使用System.getProperty("line.separator");對於BufferedWriter的具體情況,與什麼bemace建議去。

+3

哦。現在我正在使用System.getProperty(「line.separator」);無法使用BufferedWriter.newLine(),因爲在寫入之前需要填充完整的字符串。 – devnull 2010-11-01 06:28:42

+0

這救了我。我正在使用Wicket,BufferedWriter.newLine()在本地工作,但不在tomcat上。我嘗試了\ r \ n,它的工作方式就像一個魅力。謝謝! – eaglei22 2014-01-08 22:25:33

7

這就是爲什麼你應該使用BufferedWriter.newLine()而不是硬編碼你的行分隔符。它會爲您正在處理的任何平臺選擇正確的版本。