将对象写入文件需要将对象属于的类implement Serializable接口
但如果是要将一个对象数组写入文件呢?
用如下方法能够实现么?
FileOutputStream fileOut = new FileOutputStream("Customers.dat");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(对象数组名);如果不能,应该如何处理呢?
重载的toString方法的作用是什么?什么情况下必须重新写?

解决方案 »

  1.   

    对象数组如果要写入文件,对象也必须实现序列化接口,操作方法out.writeObject(对象数组名)跟类对象写入文件道理一样,取出来的时候也要按照写入的顺序toString方法是 你直接输入对象的时候默认被调用的,还没有印象什么时候必须重写
      

  2.   

    也就是说如果我的class声明 implement serializable了,
    那么这个类的对象数组就可以直接 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)
      

  3.   

    所有想要用对象输出流写到文件和从文件读取,都是java的序列化和反序列化的过程,所有相关的类以及类当中依赖的其他类都需要实现序列化接口,当然这个接口implements不需要具体你实现什么方法,但是一定要声明
      

  4.   

    问题解决了... 看来没人认真看我的报错信息...
    当然我自己也疏忽了...java.io.NotSerializableException: java.util.Scanner
    我在序列化的类中声明了 Scanner... 这是个不能序列化的玩意...
    于是整个序列化失败了  用transient标记即解决...不过还是谢谢大家了~