我创建了自己的数据结构,称为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(),因此在尝试编写更多用户时,我的文件中没有标题。我不认为这与问题有关,因为我还没有将用户写入已经写好用户的文件上。