Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最后一个序列化的对象被覆盖_Java_Arraylist_Serialization - Fatal编程技术网

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

Java 最后一个序列化的对象被覆盖,java,arraylist,serialization,Java,Arraylist,Serialization,我正在写一个跟踪图书馆书籍的程序。有一个目标书,包括标题、sku编号、价格和数量。所有书籍都存储在一个数组列表中。我试图序列化这些书并添加新书,但每次添加一本书时,最后一本都会被覆盖 下面是从save加载对象的代码 public static void readSave() { File stockFile = new File("inventory.txt"); try { if(!

我正在写一个跟踪图书馆书籍的程序。有一个目标书,包括标题、sku编号、价格和数量。所有书籍都存储在一个数组列表中。我试图序列化这些书并添加新书,但每次添加一本书时,最后一本都会被覆盖

下面是从save加载对象的代码

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();
        }   
    }

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

您可以添加加载代码以更清楚地解释问题吗?例如,您是否正在加载文件,追加项目,然后调用save,或者只调用save()和一个新列表,然后清除inventory.txt中以前保存的所有书籍?您发布的代码中没有任何错误。您的
CampusBookWindow
是否可能只是修改最后一个条目,而不是添加条目?
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();
            }
        });
    }