关闭

对象的保存和载入

244人阅读 评论(0) 收藏 举报
分类:

1.第一种方法:采用手动的方法

手动的将对象的各个字段写入到文件中,读取时再通过特定的标识符从文件中获取各个属性的值,生成对象。可以手工编辑文件

缺点:缺乏灵活性,代码量大

实现:略

2.第二种方法:采用Java的序列化机制

实现简洁,代码量小,生成的文件都是二进制的

缺点:文件不可编辑

实现:略

3.第三种方法:以XML文件的形式保存和读取(方法很多,以下使用两种方式简单实现)

①采用 java.beans.XMLEncoder 或者 java.beans.XMLDecoder

首先建立  Contact.java  (JavaBean)

import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * @Author:胡家威  
 * @CreateTime:2011-9-27 下午09:28:57
 * @Description:联系人的类
 */

@XmlRootElement //注意注解,XML的根元素
public class Contact implements Serializable {

    private static final long serialVersionUID = 4445549905840681824L;
    
    private long id;
    private String name;
    private String email;
    
    public Contact() {
    }
    
    public Contact(long id){
        this.id = id;
    }
    
    //每个getter方法上面都有一个注解,表明它是一个XML的元素
    @XmlElement
    public long getId(){
        return id;
    }
    @XmlElement
    public String getName() {
        return name;
    }
    @XmlElement
    public String getEmail() {
        return email;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setId(long id) {
        this.id = id;
    }
    
}

 

建立测试的类:

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/**
 * @Author:胡家威  
 * @CreateTime:2011-9-27 下午09:27:55
 * @Description:JAXB的简单使用实例
 */

public class JaxbTest {

    private Marshaller marshaller;
    private Unmarshaller unmarshaller;
    private String filename;
    
    public JaxbTest() {
        try {
            JAXBContext context = JAXBContext.newInstance(Contact.class);
            marshaller = context.createMarshaller();
            unmarshaller = context.createUnmarshaller();        
            filename="contact.xml";
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    // 创建一个新的联系人
    public void creatContact(Contact contact) {
        FileWriter fw = null;
        try {
            fw = new FileWriter(filename);
            marshaller.marshal(contact, fw);
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    // 读取一个联系人
    public Contact readContact() {
        FileReader fr = null;
        Contact contact = null;
        try {
            fr = new FileReader(new File(filename));
            contact = (Contact)unmarshaller.unmarshal(fr);
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return contact;
    }
    
    public static void main(String[] args) {
        JaxbTest test = new JaxbTest();
        Contact contact = new Contact();
        contact.setId(1);
        contact.setName("name");
        contact.setEmail("email");
        test.creatContact(contact);
        System.out.println("---");
        Contact contact2 = test.readContact();
        if(contact2!=null){
            System.out.println(contact2.getId());
            System.out.println(contact2.getName());
            System.out.println(contact2.getEmail());
        }
    }
    
}

 

生成的xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contact>
    <email>email</email>
    <id>1</id>
    <name>name</name>
</contact>

 

②采用JAXB

Javabean使用上面的Contact类

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * @Author:胡家威  
 * @CreateTime:2011-9-27 下午10:20:20
 * @Description:XMLEncoder和XMLDecoder的使用实例
 */

public class XMLEDncoder {

    private static String filename = "javabean.txt";
    
    public static void main(String[] args) {
        Contact contact = new Contact();
        contact.setId(1);
        contact.setName("name");
        contact.setEmail("email");
        writeJavaBean(contact);
        System.out.println("---");
        Contact contact2 = (Contact)readJavaBean();
        if(contact2!=null){
            System.out.println(contact2.getId());
            System.out.println(contact2.getName());
            System.out.println(contact2.getEmail());
        }
    }
    /**
     * 向文件中写入对象
     */
    public static void writeJavaBean(Object javabean) {
        if(javabean==null){
            return;
        }
        try {
            OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(filename)));
            XMLEncoder encoder = new XMLEncoder(out);
            encoder.writeObject(javabean);
            encoder.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 从文件中读取对象
     */
    public static Object readJavaBean() {
        try {
            InputStream in = new BufferedInputStream(new FileInputStream(new File(filename)));
            XMLDecoder decoder = new XMLDecoder(in);
            Object object = decoder.readObject();
            in.close();
            decoder.close();
            return object;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}

 

生成的txt文件:

<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0_21" class="java.beans.XMLDecoder"> 
 <object class="Contact"> 
  <void property="email"> 
   <string>email</string> 
  </void> 
  <void property="id"> 
   <long>1</long> 
  </void> 
  <void property="name"> 
   <string>name</string> 
  </void> 
 </object> 
</java> 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7919次
    • 积分:123
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:31篇
    • 译文:0篇
    • 评论:0条
    文章存档