2012-06-16 36 views
3

以下代碼片段嘗試將某些目錄中存在的目錄和文件的名稱寫入文本文件中。每個名稱應該寫入單獨的行。相反,它會在同一行上打印每個名稱。爲什麼這樣?字符串不會寫入新行

 try { 
     File listFile = new File("E:" + System.getProperty("file.separator") + "Shiv Kumar Sharma Torrent"+ System.getProperty("file.separator") +"list.txt"); 
     FileWriter writer = new FileWriter(listFile,true); 
     Iterator iterator = directoryList.iterator(); 
     while(iterator.hasNext()) { 
      writer.write((String)iterator.next()); 
      writer.write("\n"); // Did this so each name is on a new line 
     } 
     writer.close(); 
    }catch(Exception exc) { 
     exc.printStackTrace(); 
    } 

輸出:

enter image description here

我在哪裏犯了一個錯誤?

回答

5

Whenver你需要的文本格式總是使用PrintWriter
這樣做的正確方法是包裹作家PrintWriter內使用的println()方法,如:

PrintWriter printWriter = new PrintWriter(writer); 
printWriter.println(); 
+0

事實上,'換行符()'是BufferedWriter'類'的方法。 –

+0

實際上它的println() –

+2

+1用於建議使用'PrintWriter'而不是'FileWriter' :) –

4

如果您使用的是Windows,請使用\r\n而不是\n

或操作系統無關,用途:

System.getProperty("line.separator"); 
1

你應該寫你的下一行是爲「\ r \ n」,如果你是在Windows平臺。

用於Windows的下一行是爲 「\ r \ n」 個

爲Mac下一行是 「\ n」 個

或者,應該使用System.getProperty( 「line.separator」)爲您的生產線打破。它會自動爲正在運行的系統確定正確的換行符。這應該是最好的做法,因爲Java預計會在不同的操作系統上執行相同的操作。

1

如果你要使用的BufferedWriter:

File f = new File("C:/file.txt"); 
BufferedWriter bw = new BufferedWriter(new FileWriter(f, true)); 
bw.write("Hello"); 
bw.newLine(); // new line 
bw.write("How are you?"); 
bw.close();