[英]Deserializing returns null object Java
目前正在编写一个像Booking这样的应用程序,我正处于我想将我的信息存储在文件中的阶段。 我创建了一个可Serializable
Database
class,它有一个带有路径名的字段和 2 种读/写方法。 我有大约 8 个其他类扩展了数据库,每个类都包含一个Hashmap
和一些查询方法。 自然地,我在启动应用程序之前从文件中读取了Databases
,并在退出之前写入,但我遇到了一个问题,我正在读取的对象都是null 。 我已经做了 2 个小时了,我需要第二个意见。 这是数据库的读/写方法:
public void write() {
try {
File temp = new File(this.filename);
temp.createNewFile(); // create file if not present
FileOutputStream fileOut = new FileOutputStream(this.filename);
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
objectOut.writeObject(this);
objectOut.close();
System.out.println("The Object was successfully written to a file");
} catch (Exception ex) {
ex.printStackTrace();
}
}
public Object read() {
Object obj = null;
try {
File temp = new File(this.filename);
temp.createNewFile(); // create file if not present
FileInputStream fileIn = new FileInputStream(this.filename);
ObjectInputStream objectIn = new ObjectInputStream(fileIn);
obj = objectIn.readObject();
System.out.println("The Object was successfully read from the file");
objectIn.close();
} catch (EOFException ex) {
return obj;
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
这是我在我的Application
class 中加载它们的方式(这可能是问题所在)
private void loadData() {
accommodationReviewsDatabase = (AccommodationReviews) accommodationReviewsDatabase.read();
brokerAccommodationsDatabase = (BrokerAccommodations) brokerAccommodationsDatabase.read();
credentialsUserDatabase = (CredentialsUser) credentialsUserDatabase.read();
customerReviewsDatabase = (CustomerReviews) customerReviewsDatabase.read();
userConfirmationsDatabase = (UserConfirmations) userConfirmationsDatabase.read();
userMessagesDatabase = (UserMessages) userMessagesDatabase.read();
}
private void writeData() {
accommodationReviewsDatabase.write();
brokerAccommodationsDatabase.write();
credentialsUserDatabase.write();
customerReviewsDatabase.write();
userConfirmationsDatabase.write();
userMessagesDatabase.write();
}
可能会询问的一些额外信息:
如果您的read()
方法在没有 EOFException 的情况下完成,则它以return null;
. 你应该return obj;
,您阅读的 object。
如果您的读取成功,您不应该期望 EOFException 会被抛出。 EOFException 表示它在尝试读取您的 object 时用完了数据,并且无法成功完成。
如果确实收到 EOFException,最好给出一些指示而不是静默返回。 静默 catch 块拒绝您提供可能对调试有用的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.