将对象保存到文件而不重复

时间:2014-08-14 22:02:02

标签: java file awt actionlistener

我在将对象保存到文本文件时遇到问题。

这是我的代码

if(action.equals("Save Person List"))
    {
        f1 = new File("PersonList.txt");
        if(f1.exists())
        {
            f1.delete();
            f1 = new File("PersonList.txt");
        }

        try {
            fWriter = new FileWriter(f1, true);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        pWriter = new PrintWriter(fWriter, true);

        for(Person p: pList)
        {
            pWriter.println(p.getFName());
            pWriter.println(p.getLName());
            pWriter.println(p.getPNo());
            pWriter.println(p.getSalary());
        }
        JOptionPane.showMessageDialog(null, "Person List Stored in File 'PersonList.txt'");
    }

在上面的代码中,单击按钮,程序可以将对象的arraylist保存到文件(我很高兴),但假设我向arraylist添加更多对象,我想将它们保存到文件中,它会保存新数据,但在此过程中,它会复制已保存在文本文件中的数据。

我希望程序能够覆盖文本文件中的数据并写入新数据。我尝试删除文本文件(如果存在但不起作用)。它显示在代码行中。有什么方法可以绕过这个障碍吗?

所有帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

这种情况发生的原因是,虽然您删除了文件(如果已存在),但删除可能会失败:您应该检查delete()返回的值。重新创建File对象也完全没用,BTW。

它失败的原因可能是因为你永远不会将编辑器关闭到文件,从而阻止它被删除。你应该使用try-with-resources construct来确保作家在你完成时总是关闭。

最后,如果文件已存在,则无需删除该文件。只需打开一个带有false作为第二个参数的FileWriter,它就不会附加到文件的末尾,而是覆盖它。

答案 1 :(得分:0)

通过使第二个参数为“true”,您将以追加模式打开文件,这意味着它将粘贴您写入文件末尾的任何内容。尝试在没有append = true的情况下创建FileWriter,或者显式地使append = false,并查看它的作用。

http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html

if(action.equals("Save Person List"))
    {
        f1 = new File("PersonList.txt");
        if(f1.exists())
        {
            f1.delete();
            f1 = new File("PersonList.txt");
        }

        try {
            fWriter = new FileWriter(f1, false);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        pWriter = new PrintWriter(fWriter, true);

        for(Person p: pList)
        {
            pWriter.println(p.getFName());
            pWriter.println(p.getLName());
            pWriter.println(p.getPNo());
            pWriter.println(p.getSalary());
        }
        JOptionPane.showMessageDialog(null, "Person List Stored in File 'PersonList.txt'");
    }
相关问题