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>