对象的保存和载入

来源:互联网 发布:淘宝外观专利侵权投诉 编辑:程序博客网 时间:2024/05/22 19:27

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> 
原创粉丝点击