i'm trying to write an ArrayList, with different objects in it, to a file. This is my 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));
}
And here i'm trying to write that ArrayList to a file called 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();
}
}
}
When i run the program i get this error:
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)
I thought ArrayList implements Serializable, so I don't know why a NotSerializableException is thrown. I hope you guys see why this exception is thrown.
Already thanks!
Since your ArrayList
contains Coach
instances, you simply have to make the Coach
class implements java.io.Serializable
(and probably other class you're using like Goalkeeper
or Fielder
).
The Serializable Javadoc says :
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.
Still, the way Serialization works in Java is rather complex. For complete information, see http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html