2012-04-25 64 views
1

我有一個文件DataFile.txt幾個記錄。當我添加新條目時,它會清除所有其他記錄並只保存新條目。但我想追加該記錄。java:在現有文件中追加數據

private void saveFile() 
     { 
     try 
     { 
      PrintWriter out = new PrintWriter(new FileWriter("DataFile.txt")); 


      String name =""; 
      String ID=""; 
      String roomType =""; 
      String meal=""; 
      int days=0; 
      int tprice=0; 


      for (int i = 0; i < myList.size(); i++) 
      { 
       Customer c = myList.get(i); 

       name = c.getName(); 
       ID = c.getID(); 
       roomType = c.getRoomItem(); 
       meal = c.getMealItem(); 
       days = c.getDaysIndex(); 
       tprice = c.getTotalPrice(); 

       out.println(name + "," + ID+ "," + roomType+ "," + meal+ "," + days+ "," + tprice); 
      } 
      out.close(); 
      JOptionPane.showMessageDialog(null,"Data saved successfully!","", 
                   JOptionPane.INFORMATION_MESSAGE); 

      } 
      catch (Exception ex) 
      { 
      System.out.println("save file fail"); 
      } 
     } //end of the method 

謝謝。

回答

4

可以更改使用FileWriter的構造,這需要布爾append參數:

PrintWriter out = new PrintWriter(new FileWriter("DataFile.txt", true)); 

但是:

  • PrintWriter燕子例外 - 如果我是你
  • 我不會用它
  • FileWriter總是使用平臺的默認編碼 - 我也不會使用它。我會用一個OutputStream包裝在OutputStreamWriter中,並使用特定的編碼創建。
+0

我想知道它的工作原理,儘管增加了「真實」。 – Ravi 2012-04-25 10:43:30

+0

@Ravi:它不應該 - 應該追加到現有的文件。 – 2012-04-25 10:43:58

+0

我在另一個程序中有一個相同的方法,並且還沒有一個真實的參數,但那個工作非常好。 – Ravi 2012-04-25 10:48:25

0

請勿使用FileWriter。使用FileWriter定義字符編碼是不可能的,您最終將使用系統默認編碼,這通常不會是您想要使用的。

改爲使用FileOutputStream和OutputStreamWriter。是的,它是一個額外的代碼行,但如果您想編寫健壯且無缺陷的代碼,則需要額外的行。

OutputStream out = new FileOutputStream("output.txt", true); 
Writer writer = new OutputStreamWriter(out, "UTF-8"); 

使用系統默認字符編碼是最常見的錯誤來源。養成學習不依賴系統默認字符編碼(或系統默認時區)的習慣。