Java 如何在文件中存储和检索对象的arraylist?
可能重复: 我在两个不同的类中有两个ArrayList。一种是临时存储事务对象,另一种是永久存储。Im使用addAll方法将对象从临时arraylist复制到永久arraylist。然后将对象从永久arraylist保存到文件中。当我的程序重新启动时,永久ArrayList中的对象将从文件中恢复。但我有个例外。我的代码怎么了 导入java.io.FileInputStream;导入java.io.FileOutputStream; 导入java.io.ObjectInputStream;导入java.io.ObjectOutputStream; 导入java.util.ArrayList /*****作者Haleemdeen*/公共类文件导入端口{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
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();