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>