【发布时间】:2021-02-05 03:45:36
【问题描述】:
我正在编写一个跟踪图书馆书籍的程序。有一本包含标题、sku 编号、价格和数量的对象书。所有的书都存储在一个数组列表中。我正在尝试序列化书籍并添加新书,但每次添加一本书时都会覆盖最后一本书。
下面是从保存中加载对象的代码
public static void readSave() {
File stockFile = new File("inventory.txt");
try {
if(!stockFile.createNewFile() && stockFile.length() != 0) {
ObjectInputStream objIn = new ObjectInputStream(new FileInputStream(stockFile));
int size = objIn.readInt();
for(int i = 0; i < size; i++) {
Book t = (Book) objIn.readObject();
bookList.add(t);
}
objIn.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这是我的保存方法,设置为每次程序执行时保存。
public static void save() {
File inventoryFile = new File("inventory.txt");
ObjectOutputStream objOut;
try {
objOut = new ObjectOutputStream(new FileOutputStream(inventoryFile));
objOut.writeInt(bookList.size());
Iterator<Book> i = bookList.iterator();
while(i.hasNext()){
objOut.writeObject(i.next());
}
objOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
下面是我调用这些函数的主要方法
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
readSave();
CampusBookWindow window = new CampusBookWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
save();
}
});
}
【问题讨论】:
-
您能否添加加载代码以更清楚地解释问题 - 例如,您是在加载文件、附加项目然后调用 save 还是只是调用 save() 并使用一个新列表,然后擦除所有以前保存的inventory.txt 中的书籍?
-
您发布的代码中的任何内容都不会让我觉得是错误的。您的
CampusBookWindow是否可能只是修改最后一个条目,而不是添加一个条目?
标签: java arraylist serialization