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

标签 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'");
    }

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

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

所有帮助将不胜感激!

最佳答案

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

失败的三个原因可能是因为您从未关闭文件的写入器,从而阻止了文件被删除。您应该使用 try-with-resources construct以确保编写器在您完成后始终关闭。

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

关于java - 将对象保存到文件而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318266/

相关文章:

java - SecurityException 权限 - 不将图像保存到 Android 设备

php - 将 csv 文件数据插入数组 (PHP)

iphone - 从 NSManagedObject 引用磁盘上的文件

java - 使用作为选项卡控件的 Java Swing 的两个面板显示

java - 使用参数化构造函数实例化一组给定的类

java - 如何在多项目项目中拥有两个不同的 Gradle 版本?

java - AEM 6.0 的 OSGi bundle 中部署的包的状态为 Activity 但使用情况存在问题

java - Windows/Linux 框上的文件分隔符问题

java - JFrame按钮单击NullPointerException

java - 如何处理 JTabbedPane 中选项卡标题的高度