zoukankan      html  css  js  c++  java
  • 对象的保存和载入

    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> 
  • 相关阅读:
    Python测试框架:pytest
    用Python unittest搭建自动化测试框架
    unittest单元测试框架
    golang获取本地dns服务器
    Go语言HTTP请求头小写问题
    MAC上使用nginx搭建直播服务器
    go packages 学习
    Cloud Native Computing Foundation
    普通文件I/O需要两次复制,内存映射文件mmap一次复制
    page cache & buffer cache
  • 原文地址:https://www.cnblogs.com/yinger/p/2193665.html
Copyright © 2011-2022 走看看