我正在尝试从文件中加载对象。我首先通过保存对象来创建文件。如果我只将一个对象保存到文件中,我可以通过将对象转换为变量而不是arraylist来加载它。但是,如果我尝试将多个对象转换为arraylist,我会不断出错。我有时会得到这个:
animalkingdom.AnimalBuild;本地类不兼容:stream classdesc serialVersionUID = 8814442576780984798,本地类serialVersionUID = -7073710162342893881
或者
线程“main”中的异常java.lang.ClassCastException: animalkingdom.AnimalBuild无法转换为java.util.ArrayList at animalkingdom.AnimalKingdom.readFile(AnimalKingdom.java:146)at animalkingdom.AnimalKingdom.main(AnimalKingdom.java:123)Java结果: 1
写函数
// function to write object to file
public static void writeToFile(ArrayList<AnimalBuild> a) throws IOException {
ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream("animal2.txt"));
for (AnimalBuild s : a) { // loop through and write objects to file.
oos.writeObject(s);
}
}
阅读功能
// function to read from file
public static void readFile() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("animal2.txt"));
@SuppressWarnings("unchecked")
ArrayList<AnimalBuild> animalList = (ArrayList<AnimalBuild>)ois.readObject(); // casting object
Iterator it = animalList.iterator();
while(it.hasNext()) {
String obj = (String)it.next();
System.out.println(obj);
}
}
动物构建
class AnimalBuild implements Serializable {
private static final long serialVersionUID = 8814442576780984798L;
//private static final long serialVersionUID = -12049485535619732L;
public String Animaltype, Species, Color;
public AnimalBuild (String animaltype , String species, String color )
{
this.Animaltype = animaltype;
this.Species = species;
this.Color = color;
}
public String getType() {
return this.Animaltype;
}
public String getSpecies() {
return this.Species;
}
public String getColor() {
return this.Color;
}
public String setType(String newType) {
return (this.Animaltype=newType);
}
public String setSpecies(String newSpecies) {
return (this.Species=newSpecies);
}
public String setColor(String newColor) {
return (this.Color=newColor);
}
public String toString ()
{
return "\n\n Animal Type: " + this.Animaltype + "\n Species: " + this.Species + "\n Color: " + this.Color + "\n";
}
}
答案 0 :(得分:1)
序列化数据时,需要以兼容方式读取数据。您正在单独编写每个元素,以便阅读本文,您需要单独阅读它们。
但是,编写列表更简单。
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("animal2.txt"))) {
oos.writeObject(a);
}
阅读清单
List<AnimalBuild> animalList;
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("animal2.txt"))) {
animalList = (List<AnimalBuild>) ois.readObject(); // casting object
}
答案 1 :(得分:0)
逐个阅读对象,然后添加到列表中。只需改变编写对象的方式。检查下面的示例代码:
r0
您可以将整个列表作为一个对象写入文件,然后将其作为同一个对象读回,而不是逐个写入。