所以我对此非常陌生,但我已经构建了一个具有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,所以我也不知道保存方法是否也适用。所以我想知道问题是在这里还是在其他地方。
答案 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();