Question

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!

Was it helpful?

Solution

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

OTHER TIPS

ArrayList is indeed serializable, but the serialization function of ArrayList also needs to be able to serialize all the objects in the list. This means that all the objects in the list must also implement Serializable. In this case at least Coach is not serializable (and probably so aren't the other objects in the list) and thus the exception is thrown.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top