所以我有一个实现Serializable的对象,一个酒店。我正在使用具有许多按钮的FX应用程序。 FX应用程序有一个酒店对象,作为一个字段,它是我想要读/写的对象。
写入之前是否已读取?还是在读之前写的?它应该在start方法中吗?
启动时,您是否拥有彼此相邻的读/写方法?或者我应该有一个按钮来关闭/保存应用程序,并让它将对象写入文件(并在启动时读取)?
这是我到目前为止所做的,而且我相信它的写作成功,但它不是在阅读。
@Override
public void start(Stage primaryStage) {
try {
ObjectOutputStream oosoos = new ObjectOutputStream(new FileOutputStream("hotelRooms.dat"));
oosoos.writeObject(hotel);
}catch (IOException e) {
System.out.println(e.getMessage());
}
// Hotel tempHotel;
try {
ObjectInputStream iisiis = new ObjectInputStream(new FileInputStream("hotelRooms.dat"));
hotel = (Hotel)iisiis.readObject();
} catch (IOException | ClassNotFoundException ffe ) {
System.out.println(ffe.getMessage());
}
答案 0 :(得分:0)
我之前从未使用过FX,但我认为通过做出一些假设,我可以提供帮助......
我假设你的start()方法是一些FX类定义的生命周期方法,你需要在应用程序启动时加载Hotel对象。大概你有一些finish()方法,你想在以后保存最新版本的酒店对象..?
如果是这样,你需要在start()方法中'read()'对象,并在finish()方法中'write()'酒店。
您的代码段中的问题是您尝试在start()方法中执行这两个操作。这有各种各样的潜在问题,尤其是你的write()方法需要刷新流(导致数据实际写入文件),然后你可能需要在输入流之前关闭输出流将被允许阅读。
可能。
如果你打电话
,可能就是这样oosoos.close(); // this will flush the stream
...后
oosoos.writeObject(hotel);
然后intput流将成功读取该对象。 但是,你真的需要像我之前提到的那样拆分这段代码 - 你发布的代码毫无意义;你把Hotel对象写到文件然后再读回来......你可以使用你写入文件的对象,而不用再读回来......
如果由于缺乏对FX的了解而误解我,这有助于道歉。
答案 1 :(得分:0)
我做的是拆分读/写。我有它,所以它在启动时读取/输入,当他们单击按钮创建预订时,它会将当前酒店对象写入文件。