将对象写入文件需要将对象属于的类implement Serializable接口
但如果是要将一个对象数组写入文件呢?
用如下方法能够实现么?
FileOutputStream fileOut = new FileOutputStream("Customers.dat");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(对象数组名);如果不能,应该如何处理呢?
重载的toString方法的作用是什么?什么情况下必须重新写?
但如果是要将一个对象数组写入文件呢?
用如下方法能够实现么?
FileOutputStream fileOut = new FileOutputStream("Customers.dat");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(对象数组名);如果不能,应该如何处理呢?
重载的toString方法的作用是什么?什么情况下必须重新写?
那么这个类的对象数组就可以直接 out.writeObject(对象数组名) 到文件?
那么如果这个类里面有个变量是另一个类的对象数组,我是不是也需要把那个类 implement Serializable?因为我现在这么写有问题:
public class Customer implements Serializable, Comparable<Customer>
{。}main(){
customerArray = new ArrayList<Customer>();
main obj=new main();
...
obj.writeToFile(customerArray);
}void writeToFile(ArrayList<Customer> array) {
try {
FileOutputStream fileOut = new FileOutputStream("Customers.dat");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(array);
} catch (Exception e) {
e.printStackTrace();
}
}
报错:
java.io.NotSerializableException: java.util.Scanner
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
at java.util.ArrayList.writeObject(ArrayList.java:570)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
at billxpress.Main.writeToFile(Main.java:110)
at billxpress.Main.main(Main.java:68)
当然我自己也疏忽了...java.io.NotSerializableException: java.util.Scanner
我在序列化的类中声明了 Scanner... 这是个不能序列化的玩意...
于是整个序列化失败了 用transient标记即解决...不过还是谢谢大家了~