如何在Java中关闭程序后将对象写入文件并保留它?

时间:2015-05-01 04:47:40

标签: java swing object serialization deserialization

我正在制作智能ATM项目,用户也可以在其中创建帐户,因此我需要将数据存储到文件中。我尝试使用Serialization方法并将User类的对象写入序列化文件。但问题是每当我重新启动程序时,数据库都会被重写(Over Written)。

如果不使用SQL之类的任何其他方法,我有一个出路。我的意思是我现在想坚持使用Serialization,因为我还不熟悉其他方法。

public void addUserToDatabase() {
        String fileName = System.getProperty("user.home")+"/accounts.txt";
        try {
            FileOutputStream fos = new FileOutputStream(fileName);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            for(int i =0; i<numberOfUser; i++) {
                oos.writeObject(u[i]);
            }
            fos.close();
            oos.close();
        }
        catch(Exception e) {
            System.out.println("UNABLE TO ADD USER TO DATABASE!");
        }

    }

    public void fileInputStreamMethod() throws Exception
    {
        String fileName = System.getProperty("user.home")+"/aas.txt";
    FileOutputStream fos = new FileOutputStream(fileName);
    DataOutputStream dos = new DataOutputStream(fos);

    int i=12;
    dos.writeInt(i);
    dos.close();
    FileInputStream fis = new FileInputStream(fileName);
    DataInputStream dis = new DataInputStream(fis);
    int factorial=dis.readInt();
    System.out.println("The No. YOu entered is "+factorial);
    dis.close();
    }

1 个答案:

答案 0 :(得分:4)

您对数据库的读取和写入数据库需要是对称的 - 如果使用ObjectOutputStream编写对象,然后要回读,则必须使用ObjectInputStream读回对象。当你用ObjectOutputStream写出来但似乎正在使用DataInputStream读回来时,你不会这样做。这不会引发错误,因为所有内容,甚至是序列化对象,都是&#34;数据&#34;,但是您的代码无法检索可用信息。如果您使输入和输出对称,那么您的问题(至少是短期问题)应该得到解决。