2014-05-10 33 views
0

我一直在遇到一個問題,現在已經測試了我能想到的所有可能性。不幸的是,這些可能性不起作用。Java BufferedWriter - newLine()方法

基本上,我試圖用Java中的BufferedWriter寫入一個.txt文件。我需要這種設置,以便在每條數據之間可以有一條線。想象一下,這是從Java生成的文本文件,它應該是這樣的:

line1 

line2 

這裏是我的代碼:

public static void main(String[] args) { 
    Path path = Paths.get("test.txt"); 

    if (!Files.exists(path)) { 
     try { 
      Files.createFile(path); 
     } catch (IOException e) { 
      System.out.println("Error in creating test.txt! Read the stacktrace 
      below."); 
      e.printStackTrace(); 
     } 
    } 

    Charset charset = Charset.forName("UTF-8"); 
    try (BufferedWriter writer = Files.newBufferedWriter(path, charset)) { 
     String string = "line1"; 
     writer.write(string, 0, string.length()); 
     writer.newLine(); 
     writer.newLine(); 

     writer.flush(); 
    } catch (IOException e) { 
     System.out.println("Unable to write to file! Read the StackTrace below."); 
     e.printStackTrace(); 
    } 

    try (BufferedWriter writer = Files.newBufferedWriter(path, charset)) { 
     String string = "line2"; 
     writer.write(string, 0, string.length()); 

     writer.flush(); 
    } catch (IOException e) { 
     System.out.println("Unable to write to file! Read the StackTrace below."); 
     e.printStackTrace(); 
    } 
} 

這樣做的輸出產生一個文本文件,像這樣:

line2 

現在,我知道我可以結合我的兩個嘗試/捕獲,它會工作。但這只是一個測試表示;在我的真實代碼中,我需要單獨執行此操作,以便每次觸發特定事件時都可以寫入.txt文件。

基本上,newLine()方法不是保存除非我在它們後面直接寫文本。

任何幫助一如既往的讚賞!

+2

你確定這個問題不是當你重新打開你的文件時,你覆蓋了已經存在的文件嗎? – awksp

+0

您可以使用Charset charset = StandardCharsets.UTF_8;作爲StandardCharsets列表常量,所有的字符集都可以在任何JRE中使用(與ISO-8859-3不同)。沒有UnsupportedEncodingException! –

回答

1

第二個BufferedWriter或第二個隱式FileWriter覆蓋由第一個創建的文件。

按照您的建議組合語句,或使用追加模式(在這種情況下效率低下)。

+1

或者,如果您不想合併這些語句,則可以在整個應用程序中保留對作者的引用。 – ikdc

+0

由於我的需要,我無法合併它。我怎樣才能追加它? – StaticJava

+1

'Files.newBufferedWriter(路徑,字符集,StandardOpenOption.APPEND)'爲第二個。 –