先说一下这个writeObject的使用方法。我们有时候需要把一个类的很多对象的信息写入文件中,方便二次读取,但是如果一个对象中所包含的属性太多,将这些属性信息依次写入文件所需要的代码比较繁杂,为了图省事可以用writeObject方法直接写入对象。读出来的时候可以用readObject方法直接读出来。但是需要注意的是,你用writeObject所写入的类必须要实现serilizebal接口,否则会报错:java.io.NotSerializableException:…Unknow Source。实现方法如下:
JFileChooser jfc=new JFileChooser("D:\\");//新建一个文件选择器的窗体,运行时将先打开D盘
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );//选择窗体中文件类型
int result= jfc.showSaveDialog(jfc);
if (result == JFileChooser.APPROVE_OPTION)
{
String path = jfc.getSelectedFile().getAbsolutePath();//获取用户选择路径
File savefile = new File(path);
try {
FileOutputStream fos = new FileOutputStream(path);//新建一个文件输出流
ObjectOutputStream oos = new ObjectOutputStream(fos);//在文件输出流上套一个对象输出流
for(Student a:DBS.dbs) {
oos.writeObject(a);//写入对象
}
oos.writeObject(null);
oos.close();
JOptionPane.showMessageDialog(null, "保存成功!保存路径:"+path);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
读取
JFileChooser jfc=new JFileChooser("D:\\");
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
int result= jfc.showOpenDialog(jfc);
if (result == JFileChooser.APPROVE_OPTION)
{
String path = jfc.getSelectedFile().getAbsolutePath();
DBS.dbs.clear();
FileInputStream fis;
try {
fis = new FileInputStream(path);
ObjectInputStream ooi = new ObjectInputStream(fis);
Object temp;
while((temp=ooi.readObject())!=null) {
DBS.dbs.add((Student)temp);//读取
}
DBS.i = DBS.dbs.size()-1;
JOptionPane.showMessageDialog(null, "打开成功!");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}