java.beans包里面的两个类简单地实现XML解析

看到java.bean这个包的时候,觉得XMLEncoder和XMLDecoder这两个类有点意思。前者可以直接将JavaBean输入为XML文件,后者可以直接将格式正确的XML文件还原为JavaBean的对象,感觉和对象序列化有点类似,只不过这种方式我们可以清晰地看到转换为普通文件以后的对象的格式,这种方式也可以实现对一个游离对象的持久化。首先来看一个XMLEncoder的例子。 1.先定义两个普通的JavaBean: Java代码 public class User implements Serializable { private static final long serialVersionUID = 5076428480402933567L; private String id; private String name; private String password; private int age; private Integer score; private Date birth; private List list; public List getList() { return list; } public void setList(List list) { this.list = list; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getScore() { return score; } public void setScore(Integer score) { this.score = score; } } public class User implements Serializable { private static final long serialVersionUID = 5076428480402933567L; private String id; private String name; private String password; private int age; private Integer score; private Date birth; private List list; public List getList() { return list; } public void setList(List list) { this.list = list; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getScore() { return score; } public void setScore(Integer score) { this.score = score; } } Java代码 public class Role implements Serializable { private static final long serialVersionUID = -40359605540725572L; private int id; private String roleName; private String roleCode; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getRoleCode() { return roleCode; } public void setRoleCode(String roleCode) { this.roleCode = roleCode; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } } public class Role implements Serializable { private static final long serialVersionUID = -40359605540725572L; private int id; private String roleName; private String roleCode; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getRoleCode() { return roleCode; } public void setRoleCode(String roleCode) { this.roleCode = roleCode; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } } 2.下面一部分是Encoder代码。 Java代码 public class DudanBeanToXMLEncoder { public static void main(String[] args) { FileOutputStream fos = null; BufferedOutputStream bos = null; try { fos = new FileOutputStream("user.xml"); } catch (FileNotFoundException e) { e.printStackTrace(); } bos = new BufferedOutputStream(fos); XMLEncoder encoder = new XMLEncoder(bos); User user = new User(); user.setAge(10); user.setBirth(new Date()); user.setId("0x4535435"); user.setName("杜丹"); user.setPassword("111111"); user.setScore(98); List list = new ArrayList(); Role role = null; for(int i=0;i<5;i++){ role = new Role(); role.setId(i); role.setRoleName("角色" + i); role.setRoleCode(String.valueOf(10 + i)); list.add(role); } user.setList(list); encoder.writeObject(user); encoder.close(); } } public class DudanBeanToXMLEncoder { public static void main(String[] args) { FileOutputStream fos = null; BufferedOutputStream bos = null; try { fos = new FileOutputStream("user.xml"); } catch (FileNotFoundException e) { e.printStackTrace(); } bos = new BufferedOutputStream(fos); XMLEncoder encoder = new XMLEncoder(bos); User user = new User(); user.setAge(10); user.setBirth(new Date()); user.setId("0x4535435"); user.setName("杜丹"); user.setPassword("111111"); user.setScore(98); List list = new ArrayList(); Role role = null; for(int i=0;i<5;i++){ role = new Role(); role.setId(i); role.setRoleName("角色" + i); role.setRoleCode(String.valueOf(10 + i)); list.add(role); } user.setList(list); encoder.writeObject(user); encoder.close(); } } 3.以下是代码运行后产生的XML文件内容。 Java代码 10 1223693104046 0x4535435 10 角色0 1 11 角色1 杜丹 111111 98 10 1223693104046 0x4535435 10 角色0 1 11 角色1 杜丹 111111 98 进一步验证发现,如果JavaBean的属性的值为默认初始值,那么对应的属性和值将不会输出到输出流。例如,当int=0,String=null,boolean=false,自定义类型=null的时候,将会忽略该节点。注意:String如果为空字符串仍然会输出该节点,同时在从XML文件加载到JavaBean对象的时候,也会根据这些默认值对JavaBean进行填充。 4.以下是从XML文件加载为JavaBean对象的代码。 Java代码 public class DudanXMLToBeanDecoder { public static void main(String[] args) { FileInputStream fos = null; BufferedInputStream bos = null; try { fos = new FileInputStream("user.xml"); } catch (FileNotFoundException e) { e.printStackTrace(); } bos = new BufferedInputStream(fos); XMLDecoder encoder = new XMLDecoder(bos); User user = (User)encoder.readObject(); System.out.println(user.getAge()); System.out.println(user.getId()); System.out.println(user.getName()); encoder.close(); } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值