当我从中读取数据时,为什么我的.bin文件被覆盖了? (Java)的

时间:2016-10-31 00:15:03

标签: java objectinputstream objectoutputstream

我创建了自己的数据结构,称为User。我试图使用FileInputStream和FileOutputStream将用户存储在.bin文件中。按下按钮时,我成功存储了一个用户,但是当我关闭应用程序并去阅读我的用户并识别登录信息时,.bin文件变为空白。

我知道程序关闭后.bin文件不为空,但是当我尝试读取文件时,我得到了一个EOFException。这是我从文件中读取对象的代码:

public void loadUsers() {
    try {
      ObjectInputStream ois = new ObjectInputStream(fi);
      boolean endOfFile = false;
      while (!endOfFile) {
        try {
          System.out.println("loaded a user!");
          User person = (User) ois.readObject();
          Users.addUser(person);
        } catch (EOFException e) {
          endOfFile = true;
          ois.close();
        }
      }

    } catch (FileNotFoundException e) {
      e.printStackTrace(); 
    } catch (IOException e) {
      e.printStackTrace(); 
    } catch (ClassNotFoundException e) {
     e.printStackTrace(); 
    }
  }

这是我将代码写入文件的代码:

public void storeUser(User person) {
    boolean endOfFile = false;
    try {
        new ObjectInputStream(fi).readObject();
    } catch (EOFException e) {
        endOfFile = true;
    } catch (ClassNotFoundException | IOException e) {
        e.printStackTrace();
    }

    if (!endOfFile) {
        System.out.println("Appending!");
        try {
            AppendingObjectOutputStream aos = new AppendingObjectOutputStream(fo);
            aos.writeObject(person);
            aos.flush();
            aos.close();
        } catch (IOException e) {
            e.printStackTrace(); 
        }
    } else {
        System.out.println("Writing a new file!");
        try {
            ObjectOutputStream oos = new ObjectOutputStream(fo);
            oos.writeObject(person);
            oos.flush();
            oos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

AppendingObjectOutputStream只是ObjectOutputStream的一个小子类,它覆盖了writeStreamHeader(),因此在尝试编写更多用户时,我的文件中没有标题。我不认为这与问题有关,因为我还没有将用户写入已经写好用户的文件上。

0 个答案:

没有答案