当前位置: 首页 > 知识库问答 >
问题:

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

张通
2023-03-14

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

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

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个答案

令狐跃
2023-03-14

对数据库的读取和对数据库的写入需要对称--如果使用ObjectOutputStream写出对象,那么要回读,必须使用ObjectInputStream回读对象。在使用ObjectOutputStream进行写操作时不会这样做,而是使用DataInPutStream进行回读。这不会引发错误,因为所有的东西,甚至序列化的对象,都是“数据”,但是您的代码将无法检索可用的信息。如果你使你的输入和输出对称,你的问题(至少短期问题)就会解决。

 类似资料:
  • 这就是我被困的地方。当我点击座位号时,颜色从绿色变为红色,但当我刷新页面时,它并没有保留红色。我想保留红色,当另一个用户点击它时,它应该提醒“它已经预订了”。请帮我做这件事。 预订的票应该是红色的。

  • 我正在Java做一个应用程序,我需要它在后台工作,当用户关闭应用程序时,他仍然保持隐藏状态

  • LinkedHashMap将所有调用委托给其父HashMap。它还支持基于accessOrder值的访问顺序和插入顺序。如果accessOrder:true,则使用访问顺序,否则使用accessOrder:false插入顺序 公共LinkedHashMap(int初始容量、浮点加载因子、布尔访问顺序) 但LinkedHashMap如何在内部支持对象的访问顺序和插入顺序呢?

  • 有许多关于SO的问题也有同样的疑问。解决办法是设置 通知con.icon=null,并在FormCarly事件中为其调用。 在我的应用程序中,没有这样的表单,但是有通知图标,它在事件上更新。在创建时,我隐藏了我的表单,并使属性。因此,我不能有“窗体关闭”或“窗体关闭”事件。 如果此应用程序获取要退出的事件,它将调用

  • 我已经在这里寻找答案,但没有一个适用于我的具体情况。我有一个数组列表 用户可以通过与应用程序交互向其中添加条目。我知道SharedReferences不适用于对象,我无法让gson工作。 我想保存的数组列表在on暂停,并寻找一个预先存在的保存列表在on创建。这是正确的做法吗? 编辑:我应该澄清,每个条目由两个字符串组成。这是obj构造函数: 所以每个条目基本上是这样的:

  • 我做了一个应用程序,她的主要目的是保存某种信息(现在哪个信息不重要),在我的应用程序中,我做了一个名为sp的< code>SharedPreferences对象和一个< code>SharedPreferences。编辑器调用编辑器的对象。 在我的方法中,我检索存储的HashSet,如下所示: 如果它是null,我得到一个新的HashSet(第一次使用),以及我需要存储的所有信息Im作为不同的字符