1

我有一个记录很少的文件 DataFile.txt。当我添加新条目时,它会清除所有其他记录并仅保存新记录。但我想附加该记录。

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

2 回答 2

4

您可以更改为使用带有布尔append参数的 FileWriter 构造函数:

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

然而:

  • PrintWriter吞下例外——如果我是你,我不会使用它
  • FileWriter总是使用平台默认编码——我也不会使用它。我会使用一个OutputStream包装在一个OutputStreamWriter用特定编码创建的。
于 2012-04-25T10:31:18.987 回答
0

不要使用 FileWriter。无法使用 FileWriter a 定义字符编码,您最终将使用系统默认编码,这通常不是您想要使用的。

而是使用 FileOutputStream 和 OutputStreamWriter。是的,这是一行额外的代码,但如果您想编写健壮且无错误的代码,则需要额外的一行。

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

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

于 2012-04-25T11:01:53.617 回答