Java 如何在文件中存储和检索对象的arraylist?

Java 如何在文件中存储和检索对象的arraylist?,java,file-io,arraylist,Java,File Io,Arraylist,可能重复: 我在两个不同的类中有两个ArrayList。一种是临时存储事务对象,另一种是永久存储。Im使用addAll方法将对象从临时arraylist复制到永久arraylist。然后将对象从永久arraylist保存到文件中。当我的程序重新启动时,永久ArrayList中的对象将从文件中恢复。但我有个例外。我的代码怎么了 导入java.io.FileInputStream;导入java.io.FileOutputStream; 导入java.io.ObjectInputStream;导入j

可能重复:

我在两个不同的类中有两个ArrayList。一种是临时存储事务对象,另一种是永久存储。Im使用addAll方法将对象从临时arraylist复制到永久arraylist。然后将对象从永久arraylist保存到文件中。当我的程序重新启动时,永久ArrayList中的对象将从文件中恢复。但我有个例外。我的代码怎么了

导入java.io.FileInputStream;导入java.io.FileOutputStream; 导入java.io.ObjectInputStream;导入java.io.ObjectOutputStream; 导入java.util.ArrayList

/*****作者Haleemdeen*/公共类文件导入端口{

private ArrayList<Stock> permntTransactions=new ArrayList<Stock>();


void cancatToPerrmntTransactions(ArrayList<Stock> arraylist1){
    permntTransactions.addAll(arraylist1);
}

ArrayList<Stock> displayPermntTransactions(){
    return permntTransactions;
}

    void exportToFile(){

    try{  // Catch errors in I/O if necessary.
    // Open a file to write to, named SavedObj.sav.
    FileOutputStream saveFile=new FileOutputStream("SaveObj.sav");

    // Create an ObjectOutputStream to put objects into save file.
    ObjectOutputStream save = new ObjectOutputStream(saveFile);

    // Now we do the save.
    save.writeObject(permntTransactions);

    // Close the file.
    save.close(); // This also closes saveFile.
    }
    catch(Exception exc){
    exc.printStackTrace(); // If there was an error, print the info.
    }
}

        void importFromFile(){

    try{
    // Open file to read from, named SavedObj.sav.
    FileInputStream saveFile = new FileInputStream("SaveObj.sav");

    // Create an ObjectInputStream to get objects from save file.
    ObjectInputStream save = new ObjectInputStream(saveFile);

    // Now we do the restore.
    // readObject() returns a generic Object, we cast those back
    // into their original class type.

    permntTransactions = (ArrayList<Stock>) save.readObject();

    // Close the file.
    save.close(); // This also closes saveFile.
    }
    catch(Exception exc){
    exc.printStackTrace(); // If there was an error, print the info.
    }

    // Print the values, to see that they've been recovered.
    System.out.println("\t\t" + permntTransactions);
    System.out.println();
} }
这是我得到的例外:

java.io.NotSerializableException:m_media_cdstore.Stock 在java.io.ObjectOutputStream.writeObject0ObjectOutputStream.java:1156 在java.io.ObjectOutputStream.WriteObjectOutputStream.java:326 位于java.util.ArrayList.WriteObject ArrayList.java:570 在sun.reflect.NativeMethodAccessorImpl.invoke0Native方法中 位于sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:39 在sun.reflect.DelegatingMethodAccessorImpl.invokeDelegatingMethodAccessorImpl.java:25 位于java.lang.reflect.Method.invokeMethod.java:597 在java.io.ObjectStreamClass.InvokeWriteObjectStreamClass.java:945


在本例中,要序列化Stock的类必须实现。

Stock类必须实现Serializable,其所有深度字段必须实现Serializable或是primitive。

在尝试序列化对象时,确保特定的类Stock.java必须实现java.io.Serializable,如果Stock是class还有其他必须实现java.io.Serializable的类

@haleem-假设你是序列化的初学者,在他们开始之前阅读一些关于序列化的内容可能是一个好主意,以避免在以后攻击你自己。例如,只需将你想要序列化的类型实现Serializable接口..转换为hiG包括的所有类型的最大深度。。
FileImportExport file1=new FileImportExport();
file1.cancatToPerrmntTransactions(transactions);
file1.exportToFile();