I want to take the "computer" objects from the "computers.dat" file and put them into an ArrayList, then call the computer.toString() method to display them.
Here is my code:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
public class ReadComputers {
public static void main(String[] args) throws ClassNotFoundException, IOException {
FileInputStream fis = new FileInputStream("computers.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList <Computer> comp;
comp = (ArrayList <Computer>)ois.readObject();
for (int i = 0; i < comp.size(); i++) {
String computer = comp.get(i).toString();
System.out.println(computer);
}
ois.close();
}
}
For the record, the computer class has implemented the Serializable interface, in case you were wondering if that was the problem
When I run the program I get these errors:
Exception in thread "main" java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: thibodeau17.Computer
at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
at java.base/java.util.ArrayList.readObject(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
at thibodeau17.ReadComputers.main(ReadComputers.java:19)
Caused by: java.io.NotSerializableException: thibodeau17.Computer
at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.base/java.util.ArrayList.writeObject(Unknown Source)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at java.base/java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)
at thibodeau17.StoreComputers.main(StoreComputers.java:23)
Here is how I got it to work:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
public class ReadComputers {
public static void main(String[] args) throws ClassNotFoundException, IOException {
try{
FileInputStream fis = new FileInputStream("computers.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
ArrayList<Computer> computers = (ArrayList<Computer>) obj;
for (Computer c : computers) {
System.out.println(c.toString());
System.out.println();
}
}
catch (FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
catch (ClassNotFoundException e){
e.printStackTrace();
}
}
}
I borrowed code from a couple different sources around the web and my textbook, but to anyone who was curious for an answer here it is. Thank you to all that helped.