2014-10-22 39 views
1

我遇到了一些試圖追加到現有文本文件的問題。關閉後,Java PrintWriter不會追加到現有的.txt文件

它似乎沒有附加行文本。到目前爲止,我已經得到了這個方法:

public static void addLine(File f, String line) { 
    try { 
     FileWriter fw = new FileWriter(f.getName(), true); 
     BufferedWriter buffer = new BufferedWriter(fw); 
     PrintWriter pw = new PrintWriter(buffer); 
     pw.println(line); 
     pw.close(); 

    } catch (IOException e) { 
     System.err.println("IOException: " + e.getMessage()); 

    } 
} 

,在我主我有以下幾點:

public static void main(String[] args) { 
    File f = new File("adresOfFile"); 
    if (f.exists() && !f.isDirectory()) { 
     System.out.println("File " + f.getName() + " exists!"); 
     System.out.println("\n" + "Path: " + f.getAbsolutePath()); 
     System.out.println("\n" + "Parent: " + f.getParent()); 
     System.out.println("\n" + "--------------CONTENT OF FILE-------------"); 
     addLine(f, ""); 
     addLine(f, "The line to append"); 
     try { 
      displayContent(f); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } else { 
     System.out.println("File not found"); 
    } 
} 

當我運行它,它似乎並沒有給予任何錯誤。運行程序應該打印出現有的文本(displayContent),這是在追加(addLine)之後完成的。但是當我運行它時,它只顯示現有的文本,沒有附加的行。

它也沒有出現在文本文件中。我試圖把一個System.out.println();在方法中,它會打印,所以我知道它正確運行該方法,而不是追加。

編輯AWNSER:更換f.getName()與f和pw.close前加入pw.flush()

回答

0

我認爲你displayContent(文件)函數有錯誤。

上面的代碼附加到文件。 查看文件以查看是否添加了任何內容。

您是否還需要在每次追加一行時創建PrintWriter對象? 如果要追加許多連續行,請嘗試通過創建靜態/最終對象來使用單個PrintWriter/BufferedWriter對象。

+0

當我看文件沒有改變時,沒有添加行。有沒有連續的線,我只需要添加一個空行和一個測試線。 – asdfgh 2014-10-22 10:11:16

+0

你會得到什麼輸出? 你確定你正在寫文件的名稱/路徑嗎? 該代碼適用於我。這裏是[鏈接](https://gist.github.com/vedharish/abefb0705e91e4ac28ac) 此代碼附加到與moja.java文件相同位置的文件'a'。 – 2014-10-22 10:26:34

+0

並使用[FileWriter(File file,boolean append)](http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html)構造函數代替FileWriter(String,boolean) 在pw.close()之前做pw.flush() – 2014-10-22 10:36:51