编写和读取ArrayList <model>

时间:2017-12-07 09:23:51

标签: java arraylist

所以我对此非常陌生,但我已经构建了一个具有ArrayList BookList的库项目,该项目反过来又包含String Title,String Author和int Quantity等元素。我有一个add方法和一个显示方法,我想创建一个方法,当我给出相应的输入时,我能够保存并加载BookList。此外我想这样做,所以当我加载BookList时,我可以更改ArrayList中的元素,它不仅仅是从文件中读取。

public class Library implements Serializable{...}

这个类里面是我的保存和加载方法,它们在mainList和ArrayList的构造函数中被调用。

保存

   public void save(){
       try{
           FileOutputStream fileOut = new FileOutputStream("BookList.tmp");
           ObjectOutputStream objOut = new ObjectOutputStream(fileOut);
           objOut.writeObject(BookList);
           objOut.close();
       }catch(Exception ev){}    
   }//end of save()

加载

    public void load(){
        try{
            FileInputStream fileInput = new FileInputStream("BookList.tmp");
            ObjectInputStream objInput = new ObjectInputStream(fileInput);
            List<Book> BookList = (List<Book>) objInput.readObject();
            objInput.close();
        }
        catch (Exception ev){}
    }//end of load()

显示

    public void displayBooks(){
        String t; 
        String a; 
        int q;
        String s;
        Book bo = new Book();
        for(int i = 0; i<BookList.size(); i++){
            bo = BookList.get(i);
            t = bo.gettitle();
            a = bo.getauthor();
            q = bo.getquantity();
            System.out.println(i + "." + t + " " + a + " " + q);
        }//end of loop
    }//end of displayBooks()

但到目前为止,通过显示方法,我无法看到BookList,所以我也不知道保存方法是否也适用。所以我想知道问题是在这里还是在其他地方。

2 个答案:

答案 0 :(得分:3)

问题在于你的load(),你从ObjectInputStream读取书籍列表,但你只是分配给一个局部变量。我相信(虽然命名不佳)你的BookList是一个实例变量。

所以你的load()应该是

public void load(){
    try{
        ObjectInputStream objInput = new ObjectInputStream(FileInputStream("BookList.tmp"));
        this.books = (List<Book>) objInput.readObject();
        objInput.close();
    }
    catch (Exception ignored){
        // please add some handling please!
    }
}

答案 1 :(得分:0)

问题的最可能原因是BookList方法中的display()load()方法中的方法不同。

display方法中,您指的是BookList,它是一个实例变量,但在load方法中,您已将objInput.readObject()方法的结果存储在局部变量中同名BookList。我想你想将结果存储在BookList中,这是一个实例变量。

尝试更改

List<Book> BookList = (List<Book>) objInput.readObject();

BookList = (List<Book>) objInput.readObject();