我有这些类:"MyClass1", "MyClass2", "MyClass3"one_answers"MyMainClass",
public class MyMainClass implements Serializable {
private String att1, att2, att3;
private int att4, att5, att6;
private LinkedList <MyClass1> myClass1List = new LinkedList<MyClass1>();
private LinkedList <MyClass2> myClass2List = new LinkedList<MyClass2>();
private LinkedList <MyClass3> myClass3List = new LinkedList<MyClass3>();
}
我的程序创建"MyMainClass"的寄存器(对象)并将其存入LinkedList中。我想把对象的LinkedList保存在一个文件中,以便在我重新打开程序后得到它们。怎么做呢?我已经尝试过ObjectOutputStream,但不工作。谢谢。
编辑:我的代码添加一个对象(我只是读了一个例子,并尝试):
public static void addObject (MyMainClass p) {
try {
outputStream = new ObjectOutputStream(new FileOutputStream("myfile.dat"));
outputStream.writeObject(p);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
System.exit(1);
} catch (IOException ex) {
ex.printStackTrace();
System.exit(1);
} finally {
try {
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
} catch (IOException ex) {
ex.printStackTrace();
System.exit(1);
}
}
}
注意:"MyClass1", "MyClass2", "MyClass3"是可序列化的。
我将使"myClass1", "myClass2"one_answers"myClass3"可序列化,然后将myClass1List
, myClass2List
和myClass3List
(以及您想要保存的任何其他数据)包装在另一个可序列化的类中,以便您可以使用序列化/反序列化来保存和恢复所有程序状态。
除非myMainClass
是那个包装器,在这种情况下,您需要声明它们都实现了Serializable
myMainClass
未标记为Serializable
。此外,myClass1
, myClass2
和myClass3
也是可序列化的吗?如果没有,他们应该。
另一个注意事项,请遵循Java命名约定;类名以大写字母开头
你确定它没有写入文件,还是代码抛出了你看不到的异常?
在你所有的catch
块中,你有System.exit(1)
,它绝对没有给你任何正在发生的异常的信息;你实际上是在吞下它们。您至少应该打印出stacktrace (ex.printStackTrace()
),这样您就可以看到哪里出错了。
我在很久以前的高中项目中使用了follow。由于我的英语水平很差,我真的不明白你想要保存和加载什么类(LinkedList或myMainClass),但我使用这个解决方案成功地存储和加载了我的任何自定义对象。我希望它对你有用。
用法:
myMainClass object;
//
// ... your code fillin up the content of object
//
MyIO io = new MyIO();
io.save("", "myfile.dat", object); // "" as first argument will make java use current working directory
// to load the object:
myMainObject object = (myMainObject) io.load("", "myfile.dat");
源:
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
public class MyIO {
// String path - path to the directory where the file is supposed to be saved.
// String filename - the name of the file
// Object data - object that you wish to save in the file. In your case "myMainClass"
public void save(String path, String filename, Object data) {
try {
FileOutputStream fos = new FileOutputStream(path + filename, false);
GZIPOutputStream gzos = new GZIPOutputStream(fos);
ObjectOutputStream out = new ObjectOutputStream(gzos);
out.writeObject(data);
out.flush();
out.close();
} catch (IOException e) {
System.out.println(e);
}
}
// String path - path to the directory where the file is stored
// String filename - the name of the file
// The function returns java object which can be cast to myMainClass.
public Object load(String path, String filename) {
try {
FileInputStream fis = new FileInputStream(path + filename);
GZIPInputStream gzis = new GZIPInputStream(fis);
ObjectInputStream in = new ObjectInputStream(gzis);
Object data = in.readObject();
in.close();
return data;
} catch (Exception e) {
System.out.println(e);
}
return null;
}
}