赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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

发布时间:2007.12.12 05:18     来源:赛迪网    作者:郝从平

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文件。
      (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 新手入门--改进JAVA字符串分解的方法 (12-11) · Java虚拟机类装载--原理、实现与应用 (12-11)
· Static和Final修饰类属性变量及初始化 (12-11) · 关于提高自己JAVA水平的十大技术讨论 (12-11)
· Java基础知识:你是否了解KVM的常量池 (12-11) · 基础:深入解析Java的新特性assertion (12-11)
· 编程基础:深入分析Java中的数据结构 (12-11) · Adapter 模式在 J2SE 事件处理中的应用 (12-11)
· 不要重新分配被锁定对象的对象引用 (12-11) · JAVA基础:Java编程中怎样实现中文排序 (12-11)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 信息化市场百家争鸣 SaaS深陷争议“泥潭”
· 提高管理水平 "两栖"CIO应具备的六大能力
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统