序列化的最后一个对象被覆盖

时间:2020-10-22 07:02:41

标签: java arraylist serialization

我正在编写一个跟踪图书馆书籍的程序。有一个对象书,其中包括标题,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();
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

我的问题是当我点击添加书籍按钮时,我不会为该项目创建一个新的书籍对象,而是我重新分配了最后一个书籍对象,因此对象最后一个书籍对象从 bookList 数组列表中删除