gpt4 book ai didi

java - 将具有不同对象的数组列表写入文件

转载 作者:行者123 更新时间:2023-11-29 05:41:47 25 4
gpt4 key购买 nike

我正在尝试将其中包含不同对象的 ArrayList 写入文件。这是我的数组列表:

ArrayList<Person> personList = new ArrayList<Person>();
private Person theCaptain;


void init(){

//Adding persons to the list

personList.add(new Coach("Tesan de Boer", "Vieruslaan 3b", "0689337554"));
personList.add(new Goalkeeper("Peter Post", "Eeuwige student 66", "2222", 1));
personList.add(new Goalkeeper("piet puk", "Weg van ongenade 88", "2222", 21));
personList.add(new Goalkeeper("Siem van Aanhoolt", "Straatweg 45", " 0612213446", 31));
personList.add(new Fielder("Koen Weegink", "Straatweg 45", "2222", 2));
personList.add(new Fielder("Jan-Willem Rufus op den Haar", "Straatweg 45", " 0614226698", 3));
personList.add(new Fielder("Tom Kraniker", "Straatweg 45", "069873663", 4));
personList.add(new Fielder("Leon het Kanon", "Straatweg 45", "2222", 6));
personList.add(new Fielder("Robin Hogezant", "Straatweg 45", "2222", 7));
personList.add(new Fielder("Loesoe de Kat", "Straatweg 45", "222", 8));
personList.add(new Fielder("Morris de Spee", "Straatweg 45", "2222", 9));
personList.add(new Fielder("Rein Zoekers", "Straatweg 45", "2222", 10));
personList.add(new Fielder("Darion Pok", "Straatweg 45", "2222", 11));
personList.add(new Fielder("Achmed de Bom", "Straatweg 45", "2222", 12));

}

我在这里尝试将 ArrayList 写入名为 test 的文件:

public class Main {

public static void main(String[] args)throws Exception {

Team team = new Team();
team.init();
ArrayList<Person> playersData = team.getPersonList();

try {

// create a new file with an ObjectOutputStream
FileOutputStream out = new FileOutputStream("test.txt");
ObjectOutputStream oout = new ObjectOutputStream(out);

// write something in the file
oout.writeObject(playersData);

// close the stream
oout.close();

// create an ObjectInputStream for the file we created before
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.txt"));



} catch (Exception ex) {
ex.printStackTrace();
}

}

当我运行这个程序时,我得到这个错误:

java.io.NotSerializableException: Coach
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.ArrayList.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Main.main(Main.java:24)

我以为 ArrayList 实现了 Serializable,所以我不知道为什么会抛出 NotSerializableException。我希望你们明白为什么抛出这个异常。

已经谢谢了!

最佳答案

由于您的 ArrayList 包含 Coach 实例,您只需让 Coach 类实现 java.io.Serializable(可能还有您正在使用的其他类,例如 GoalkeeperFielder)。

Serializable Javadoc说:

When traversing a graph, an object may be encountered that does not support the Serializable interface. In this case the NotSerializableException will be thrown and will identify the class of the non-serializable object.

不过,序列化在 Java 中的工作方式相当复杂。有关完整信息,请参阅 http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html

关于java - 将具有不同对象的数组列表写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17252155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com