`

[转]Java 小例子:数据持久化(保存数据到文件)

阅读更多

说数据持久化,初学者可能还不太懂;但要说把数据保存到文件,这谁都懂了。为什么说持久化就是把数据保存到文件?持久化指的就是当程序退出后,其中的数据能够保留下来,供程序再次运行的时候使用。这些数据保留在什么地方最好呢?当然是文件里。

保存到文件是数据持久化最常用的方式,除此之外,还可以把数据保存到数据库,或者发送到其它机器,这都是持久化。不过保存在文件是最简单的方式。具体来说就是:选取需要保存的数据,按照一定的格式组织起来,然后写入文件。下面是一个简单的例子:


import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.text.DateFormat;
 
/**2009-3-15
 * 持久化示例。如何将内存中的数据保存起来,并没有一定的格式,任何人
 * 都可以根据自己的喜好来制定。持久化需要文件操作,所以请务必先弄懂
 * 如何读写文件。
 */
public class Persistant {
 
    //文件名可随意指定,你可以用文本编辑器打开这个文件(注意,记事本无法处理换行)
    static String filename = "persons.data";
 
    public static void main(String[] args) throws Exception {
        // 将这个程序运行两遍。
        // 第一遍它会创建一些 Person 对象并保存到文件;
        // 第二遍它会从文件中读取对象数据并显示出来。
        if (!new File(filename).exists()) {
            createAndSave();
        } else {
            readAndShow();
        }
    }
 
    // 生成并保存 Person 对象
    private static void createAndSave() throws IOException {
        List<Person> persons = createPersons();
        savePersons(persons);
    }
 
    // 读取并显示 Person 对象
    private static void readAndShow() throws IOException {
        List<Person> persons = readPersons();
        showPersons(persons);
    }
 
    // 创建要保存的 Person 对象
    private static List<Person> createPersons() {
        List<Person> result = new ArrayList<Person>();
        result.add(new Person("张三", new Date(), true));
        result.add(new Person("李四", new Date(), false));
        result.add(new Person("王五", new Date(), true));
        return result;
    }
 
    // 保存 Person 对象到文件。保存格式为:
    // 1、每个 Person 一行
    // 2、每行依次存放 name、birthday、male 三个属性值,用 tab 隔开
    // 3、birthday 属性保存的是毫秒数,male 属性保存的是字符串
    private static void savePersons(List<Person> persons) throws IOException {
 
        // 生成文件内容
        String data = "";
        for (Person person : persons) {
            data += getPersonString(person) + "\n";
        }
 
        // 保存文件内容
        FileWriter writer = new FileWriter(filename);
        writer.write(data);
        writer.close();
        System.out.println("对象保存完毕。");
    }
 
    private static String getPersonString(Person person) {
        return person.getName() + "\t" +
                  person.getBirthday().getTime() + "\t" +
                  person.isMale();
    }
 
    // 从文件中读取 Person 对象
    private static List<Person> readPersons() throws IOException {
        List<Person> result = new ArrayList<Person>();
 
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        String line;
        while ((line = reader.readLine()) != null) {
            result.add(getPersonFromString(line));
        }
 
        return result;
    }
 
    // 通过一行文件内容生成一个 Person 对象
    private static Person getPersonFromString(String line) {
        String[] parts = line.split("\t");  // 获取被分隔的三个部分
 
        return new Person(
                parts[0],                               // 姓名
                new Date(Long.parseLong(parts[1])),     // 出生日期
                Boolean.parseBoolean(parts[2])          // 是否为男性
        );
    }
 
    // 显示 Person 对象
    private static void showPersons(List<Person> persons) {
        DateFormat dateFormat = DateFormat.getDateTimeInstance();
        for (Person person : persons) {
            System.out.println(person.getName() + ", " +
                    dateFormat.format(person.getBirthday()) + ", " +
                    (person.isMale() ? "男" : "女"));
        }
    }
}
 
// 要持久化的类
class Person {
 
    private String name;        // 姓名
 
    private Date birthday;      // 生日
 
    private boolean male;       // true 表示男性,false 表示女性
 
    Person(String name, Date birthday, boolean male) {
        this.name = name;
        this.birthday = birthday;
        this.male = male;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Date getBirthday() {
        return birthday;
    }
 
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
 
    public boolean isMale() {
        return male;
    }
 
    public void setMale(boolean male) {
        this.male = male;
    }
}

转载自:http://blog.csdn.net/YidingHe/archive/2009/03/09/3971073.aspx
分享到:
评论

相关推荐

    Java 小例子:数据持久化(保存数据到文件)

    Java 小例子:数据持久化(保存数据到文件) Java 小例子:数据持久化(保存数据到文件)

    精通Hibernate:对象持久化技术第二版part3

    本章通过简单的helloapp应用例子,演示如何利用Hibernate来持久化Java对象。 3.1 创建Hibernate的配置文件 47 3.2 创建持久化类 48 3.3 创建数据库Schema 51 3.4 创建对象-关系映射文件 52 3.4.1 映射文件的...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章通过简单的helloapp应用例子,演示如何利用Hibernate来持久化Java对象。 3.1 创建Hibernate的配置文件 47 3.2 创建持久化类 48 3.3 创建数据库Schema 51 3.4 创建对象-关系映射文件 52 3.4.1 映射文件的...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,...

    java8源码-Java-Interview:java面试相关的一些问题

    java8 源码 Java-面试 top.hengshare.interviewer.basic java基础 spring ...master接收到SYNC命令后,在后台保存快照(RDB持久化)并缓存保存快照这段时间的命令,然后将保存的快照文件和缓存的命令发

    Java核心技术II(第8版)

    8.9.1 JavaBean持久化可用于任何数据 8.9.2 一个JavaBean持久化的完整示例 第九章 安全 9.1 类加载器 9.1.1 类加载器的层次结构 9.1.2 将类加载器作为命名空间 9.1.3 编写你自己的类加载器 9.2 字节码校验 9.3 安全...

    二进制XML存储方案

    那么就使用自定义的数据文件格式?传统情况下,我们会用一个或者若干个struct将数据打包,一下子塞进文件。但是现在用户说了:我们现在定义的数据结构可能会变:) 看来,我们的存储方案还必须要足够的柔性化。 想到...

    java 编程入门思考

    10.8.2 用Zip进行多文件保存 10.8.3 Java归档(jar)实用程序 10.9 对象串联 10.9.1 寻找类 10.9.2 序列化的控制 10.9.3 利用“持久性” 10.10 总结 10.11 练习 第11章 运行期类型鉴定 11.1 对RTTI的需要 11.1.1 ...

    Java初学者入门教学

    10.8.2 用Zip进行多文件保存 10.8.3 Java归档(jar)实用程序 10.9 对象串联 10.9.1 寻找类 10.9.2 序列化的控制 10.9.3 利用“持久性” 10.10 总结 10.11 练习 第11章 运行期类型鉴定 11.1 对RTTI的需要 11.1.1 ...

    java联想(中文)

    10.8.2 用Zip进行多文件保存 10.8.3 Java归档(jar)实用程序 10.9 对象串联 10.9.1 寻找类 10.9.2 序列化的控制 10.9.3 利用“持久性” 10.10 总结 10.11 练习 第11章 运行期类型鉴定 11.1 对RTTI的需要 11.1.1 ...

Global site tag (gtag.js) - Google Analytics