[转载]保存Java程序状态及设置之对象序列化

保存Java程序状态及设置之对象序列化

Windows开发中,可以使用*.ini文件来保存程序的状态或设置等数据,并且一般都提供了操作ini文件的API。但在Java中怎么实现类似的功能呢?

比如,在程序中,我们需要保存一个窗口的位置,让程序在下次启动的时候,仍然保持在上一次关闭的时候的位置,或者程序需要将数据库连接的设置保存下来。

其中一种方法就是使用对象序列化存储。首先,简单解释一下序列化的含义:在Java程序中,对象是存在于内存中的,序列化就是将这个对象在内存中的形态变成字节流,然后输入到一个文件中,这样就将一个对象固定下来,不会随程序的关闭而消失。我们建立一个可以序列化的类,注意,在Java中,并不是每个类都可以实现序列化的,要实现java.io.Serializable接口的类才可以序列化。

public class ProgramSave implements java.io.Serializable{

private int height;

private int width;

private int left;

private int top;

public ProgramSave(){

height=200;

width=200;

left=0;

top=0;

}

public int getHeight(){

return height;

}

public void setHeight(int hei){

height=hei;

}

…..

程序中用4个属性来保存程序的状态,并且声明多个方法来保存和获取属性。上面的程序只写了一个获取和保存的方法,其他的类似。

当程序退出的时候,在退出前,我们要先保存程序的状态,将下面的方法添加到程序退出前,执行完下面的代码后在退出程序。

//创建一个可以序列化的对象

ProgramSave save = new ProgramSave();

save.setHeight(窗口的高);

…..

这样将程序的状态保存到save这个对象中,但是,现在程序的状态只是保存在内存中,因为sava这个对象现在仍然是在内存中的。下面创建一个文件,并把save对象保存到这个文件中。

//创建文件对象

File file = new File(“mysave.save”);

file.createNewFile();

//获取文件的字节流对象

FileOutputStream bytetOut = new FileOutputStream(file);

ObjectOutputStream outer = new ObjectOutputStream(bytetOut)

//save对象写入

outer.writeObject(save);

outer.flush();

outer.close();

到此,save对象,就被保存到文件中了。

在程序启动的时候,相反,我们要将mysave.save中的对象重新载入到内存中,然后获取其中保存的height等值,再调整窗口的位置。

在窗口对象初始化的时候,载入对象。

//获取文件对象

File f=new File(“mysave.save”);

FileInputStream byteOut = new FileInputStream(f);

ObjectInputStream out = new ObjectInputStream(byteOut);

//将文件对象中的字节流读出来,并保存在内存中的mySet对象中

SystemSave mySet = (SystemSave) out.readObject();

out.close();

byteOut.close();

后面就可以通过mySet.getHeight()等方法来获取保存的数据,然后再将窗口的高等属性设置为这个获取的值。

2.通过properties文件来保存。Properties文件类似于windows编程中的ini文件,Java中也提供了API来操作properties文件。

本文根据作者自己的心得所写,难免有疏忽遗漏,欢迎对文章进行批评指正。作者郝从平 Email:cqhcp@126.com

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130865/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130865/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值