可以使用ObjectOutputStream将对象保存到文件中,然后使用ObjectInputStream导入对象,
我写了一个小示例程序,import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Main {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
A a = new A();
B b = new B();
save(a);
C c = load();
System.out.println(c.getClass()); // prints"A"
if (c instanceof A) {
System.out.println("is of class A");
A loaded = (A) c;// you can now use this object
System.out.println(a.someMethod());
} else if (c instanceof B) {
System.out.println("is of class B");
B loaded = (B) c;
} else {
System.out.println("should not occur");
}
}
private static C load() throws IOException, FileNotFoundException, ClassNotFoundException {
ObjectInputStream in = new ObjectInputStream(new FileInputStream("f.txt"));
C s = (C) in.readObject();
in.close();
return s;
}
private static void save(C c) throws FileNotFoundException, IOException {
final FileOutputStream fout = new FileOutputStream("f.txt");
final ObjectOutputStream out = new ObjectOutputStream(fout);
out.writeObject(c);
out.flush();
out.close();
}
}
class A implements C {
// serialVersion is the version of the clas, so if you save the object with
// serialVersion 1 and then change something, change this version to two, so you
// get an error if you are trying to load"obsolete" objects
private static final long serialVersionUID = 1L;
@Override
public String getName() {
return"A";
}
public String someMethod() {
return"someMethod";
}
}
class B implements C {
private static final long serialVersionUID = 1L;
@Override
public String getName() {
return"B";
}
public String someOtherMethod() {
return"someOtherMethod";
}
}
interface C extends Serializable { //Objects saved to a File have to be Serializable
String getName();
}