【问题标题】:last object serialized gets overwritten最后一个序列化的对象被覆盖
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 2014-02-03
    • 2014-09-06
    • 2013-10-03
    • 2020-08-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2022-08-12
    相关资源
    最近更新 更多