对象的保存和载入
来源:互联网 发布:淘宝外观专利侵权投诉 编辑:程序博客网 时间: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>
- 对象的保存和载入
- 对象的保存和载入
- 图像的载入,显示和保存
- 载入和保存properties文件
- matlab工作空间,变量的保存和载入
- OpenCV Python 图像的载入、显示和保存
- python之cv2与图像的载入、显示和保存
- FileDialog 使用方法(保存和载入)
- Unity3D结合XML载入和保存数据
- OpenCV--图像的载入-显示-保存
- Joone框架的神经网络如何保存和载入训练好的模型
- OpenCV Python教程(1、图像的载入、显示和保存)
- OpenCV Python教程(1、图像的载入、显示和保存)
- OpenCV Python教程(1、图像的载入、显示和保存)
- OpenCV Python教程(1、图像的载入、显示和保存)
- OpenCV Python教程(1、图像的载入、显示和保存)
- Python下使用OpenCV教程(图像的载入、显示和保存)
- OpenCV Python教程(1、图像的载入、显示和保存)
- zxing横屏改为竖屏识别,多次扫描,以及存在的摄像拉伸的问题
- c++中const用法总结
- URL的井号
- dede调用指定栏目id {dede:field.content/}
- SQLSERVER 数据库出现大量重复
- 对象的保存和载入
- Ubuntu 命令
- linux下查看系统资源和负载
- 【cocos2d-x IOS游戏开发-捕鱼达人1】内容介绍
- Selenium概要及工具组介绍
- 将用户输入的小写货币形式转换为规范的大写货币形式
- 安装SVN Server
- Android 图像绘制之Matrix 的使用
- 基于smtp协议的邮件系统(自己写的)