【发布时间】:2016-05-18 20:39:35
【问题描述】:
我正在尝试从文件中加载对象。我首先通过将对象保存到文件来创建文件。如果我只将一个对象保存到文件中,我可以通过将对象转换为变量而不是数组列表来加载它。但是,如果我尝试将多个对象转换为数组列表,我会不断出错。我有时会得到这个:
animalkingdom.AnimalBuild;本地类不兼容:流 classdesc serialVersionUID = 8814442576780984798,本地类serialVersionUID = -7073710162342893881
或者这个
线程“主”java.lang.ClassCastException 中的异常: animalkingdom.AnimalBuild 不能转换为 java.util.ArrayList at animalkingdom.AnimalKingdom.readFile(AnimalKingdom.java:146) 在 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";
}
}
【问题讨论】:
-
您正在将每个单独的对象写入文件。如果你想写List,那么就写List吧。
-
你不能写出一堆单独的对象,然后期望将它们作为
ArrayList读回。 -
我将我所有的对象都放在一个数组列表中,我希望能够将充满对象的数组列表保存到一个文件中,然后将它们重新加载。我不确定我遵循了什么你们在说。
标签: java object arraylist casting