我有自己写的自定义对象列表,然后读取到文件中。
这是我的课程:
public class Book implements Serializable{
private int isbn;
private String category;
private String authorName;
public int getIsbn() {
return isbn;
}
public String getCatId() {
return category;
}
public void setIsbn(int isbn) {
this.isbn = isbn;
}
public void setCategory(String category) {
this.category = category;
}
public void setAuthorName(String authorName) {
this.authorName = authorName;
}
public String getAuthorName() {
return authorName;
}
public Book() {}
//copy book
public Book(Book book, int id) {
this.category = book.category;
this.title = book.title;
this.authorName = book.authorName;
this.isbn = id;
}
}
这是我用来编写对象列表的函数:
private static <T> void writeToFile(List<T> items, String fileName) {
try {
String path = "src\\hw1\\library\\repos\\" + fileName;
FileOutputStream f = new FileOutputStream(path, true);// true- means append to file
ObjectOutputStream o = new ObjectOutputStream(f);
// Write objects to file
o.writeObject(items);
o.close();
f.close();
} catch (Exception e) {}
}
这是我从列表中读取的功能:
private static <T> List<T> readFromFile(Context context, String fileName) {
try {
String path = "src\\hw1\\library\\repos\\" +fileName ;
FileInputStream fi = new FileInputStream(path);
ObjectInputStream oi = new ObjectInputStream(fi);
// Read objects
List<T> items = (List<T>)oi.readObject();
oi.close();
fi.close();
return items;
} catch (Exception e) {}
return null;
}
对象列表被写入文件, 但是当我尝试使用从文件中获得的对象上方的功能读取它时,该对象仅是第一次写入文件的对象。
知道我为什么只从文件中获取第一次写入文件的对象吗?
答案 0 :(得分:0)
我只是假设
但是当我尝试使用我得到的对象上方的功能读取它时 仅从文件中写入的对象。
一次写入将给定列表放入文件,第二次写入将放入另一个列表至该文件-因为您正在追加到文件
现在,您读取方法始终从头读取,因此readFromFile
的每次调用都将导致从给定文件中读取相同(对象优先)的对象(在您的情况下列出)。您将不得不在同一视频流上做更多的f.readObject()
。
如果您不打算一次读取所有对象,我建议每个列表使用1个文件,这样就不会使用试图“移动”文件指针位置的文件(也不做空f.readObject()
调用)