2014-06-25 87 views
0

我試圖將多行字符串打印到PrintWriter中,但它不能識別不同的行。無法用PrintWriter將多行字符串打印到文件中

我有這個字符串:「2 \ n0 0 1 string1 \ n0 2 1 string2」。

我預計將有到該文件中的文本是:

2 
0 0 1 string1 
0 2 1 string2 

,但它實際上是:

20 0 1 string10 2 1string2 

我的代碼是:

public void save(String str){ 
    try{ 
     PrintWriter out = new PrintWriter("file.txt"); 
     out.println(str); 
     out.close(); 
     System.out.print(str); 
    }catch(Exception e){System.out.println(e);} 
} 

它打印OK的安慰。

我正在使用BlueJ進行編碼。我的操作系統是W7,我用記事本打開了文件。

已解決!

使用「\ r \ n」而不是「\ n」正常工作!

+1

你如何看待文件內容?你在使用什麼操作系統?您是否知道不同的操作系統將不同的字符視爲新的行分隔符? –

+3

當你看到'20 0 1 string10 2 1string2'時,你在使用什麼平臺,以及你在看什麼編輯器? –

+0

我並不知道不同的操作系統使用不同的分隔符,但我總是在w7中使用「\ n」,它運行良好。我用記事本打開了文本文件,然後使用Bluej進行編碼。 – Joan

回答

1

PrintWriter.println()的Javadoc,

由寫入行分隔符字符串終止當前行。行分隔符字符串由系統屬性line.separator定義,不一定是單個換行符('\ n')。

所以,我認爲你可以使用 -

try{ 
    PrintWriter out = new PrintWriter("file.txt"); 
    for (String s : str.split("\n")) { 
    out.println(s); 
    } 
    out.close(); 
    System.out.print(str); 
}catch(Exception e){System.out.println(e);} 
+2

@JoanPuicgerver:請認爲'\ r \ n'只是windows的正確行結束符。不要不必要地介紹操作系統依賴關係。 – Deduplicator

3

如果你想代表在Windows上的文字換行,你需要使用\r\n,這是該平臺的標準分隔符。

換句話說,你原來的字符串需要

"2\r\n0 0 1 string1\r\n0 2 1 string2" 

不過,這很快就變得不可移植的,所以你應該不是爲標準的分隔符查詢,然後再使用它來構建你的字符串。

String d = System.getProperty("line.separator"); 
String mystr = String.format("2%s0 0 1 string1%s0 2 1 string2", d, d) 

此外,基於this answer,我們可以用%n格式說明,以避免調用getProperty()

String mystr = String.format("2%n0 0 1 string1%n0 2 1 string2") 
+0

最後兩行不應該是'%n',而不是'%% n'?所以'String.format(「2%n0 0 1 string1%n0 2 1 string2」)'不需要'd'嗎? –

+0

@davidwallace我從鏈接的問題中抓住了它。如果我測試並且它是錯誤的,我會稍後更新。我雖然刪除了d。 – merlin2011

+0

是的,你從那個答案中說「使用'%n'」。看來你誤解了它。 –