2012-04-25 39 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"); 

使用系统默认字符编码是最常见的错误来源。养成学习不依赖系统默认字符编码(或系统默认时区)的习惯。