java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例
package org.rui.io.xml;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Serializer;
/**
* 序列化到XML中
* 使用xom来产生被转换为xml的Element对象的 person数据
*
*http://www.xom.nu/
* XOM尽管也是一种面向对象的XML API。相似于DOM的风格,可是它有一些与众不同的特性,比方严格保持内存中对象的不变性。
* 从而使XOM实例总是能序列化为正确的XML。此外,与其它Java XML API相比,XOM追求更简单和更正规。
*
*
*/
public class Person {
private String first,last;
public Person(String first,String last)
{
this.first=first;
this.last=last;
}
//转换当前对像为xml
public Element getXml()
{
Element person=new Element("person");
Element firstName=new Element("first");
firstName.appendChild(first);
person.appendChild(firstName);
Element lastNaem=new Element("last");
lastNaem.appendChild(last);
person.appendChild(lastNaem);
return person;
}
//////////////////////////////
public Person(Element person)
{
first=person.getFirstChildElement("first").getValue();
last=person.getFirstChildElement("last").getValue();
}
//////////////////////////////
@Override
public String toString() {
return "Person [first=" + first + ", last=" + last + "]";
}
//////////////////////////////把doc序列化
public static void format(OutputStream os,Document doc) throws Exception
{
Serializer serializer=new Serializer(os,"ISO-8859-1");
serializer.setIndent(4);
serializer.setMaxLength(60);
serializer.write(doc);
serializer.flush();
}
///////main
public static void main(String[] args) throws Exception {
//实列对象列表
List<Person> list=Arrays.asList(new Person("Dr.Bunsen","heneydew"),
//new Person("东方","不败"),
new Person("ddd","ffff"),
new Person("kkkk","jjjjj"));
System.out.println(list);
//构见xml
Element root=new Element("people");
for(Person p:list)
root.appendChild(p.getXml());
Document doc=new Document(root);
format(System.out,doc);
//序列化
format(new BufferedOutputStream(
new FileOutputStream("people.xml")),doc);
}
}
/**
[Person [first=Dr.Bunsen, last=heneydew], Person [first=东方, last=不败], Person [first=kkkk, last=jjjjj]]
<?xml version="1.0" encoding="ISO-8859-1"?>
<people>
<person>
<first>Dr.Bunsen</first>
<last>heneydew</last>
</person>
<person>
<first>东方</first>
<last>不败</last>
</person>
<person>
<first>kkkk</first>
<last>jjjjj</last>
</person>
</people>
*/
package org.rui.io.xml;
import java.io.File;
import java.util.ArrayList;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Elements;
/**
* 反序列化xml
* xom的方法都具有相当的自解释性。能够在xom文档中找到它们,
* @author lenovo
*
*/
public class People extends ArrayList<Person>{
public People(String fileName) throws Exception
{
Document doc=new Builder().build(new File(fileName));//打开读取文件
Elements elements=doc.getRootElement().getChildElements();
for(int i=0;i<elements.size();i++)
{//转换xml为对象
add(new Person(elements.get(i)));
}
}
public static void main(String[] args) throws Exception {
//String path="D:\\Users\\liangrui\\workspace\\thinking/";
//People people=new People(path+"people.xml");
People people=new People("people.xml");
System.out.println(people);
}
}
/**
[Person [first=Dr.Bunsen, last=heneydew], Person [first=ddd, last=ffff], Person [first=kkkk, last=jjjjj]]
*/
package org.rui.io.xml;
import java.util.prefs.Preferences;
/**
* Preferences API 提供一种系统的方法来处理用户的偏好设置信息,比如.保存用户设置, 记住某个文本框的最后一个值等.
Preferences 是一个能够为随意名字的键/值对. 值能够为布尔型,字符型, 其它简单的数据类型,
如int. Preferences 通过get和set来获取和设置偏好信息,且get的方法可设置一个默认值。当要获取的键未被设置值时,就返回此默认值.
1.2. 数据的实际存储
数据的实际存储是依赖于操作系统平台的, 比如.在Windows 以下是使用注冊表来保存这些信息,
而在Linux以下是使用用户的home文件夹以下的一个隐藏文件来存储的.
2. API使用
java.util.prefs.Preferences 非常easy使用. 你不得不定义一个节点来存储数据.
接下来就能够使用get和set的方法. 第二个參数是默认值,即当找不到值时。得到的就是这个默认值了,
比如. 假设preference的值还未设置, 那么将会返回这个默认值.
* @author lenovo
*
*/
public class PerferencesDemo {
public static void main(String[] args) throws Exception {
Preferences perfs=Preferences.userNodeForPackage(PerferencesDemo.class);
perfs.put("location", "0z");
perfs.put("Footwear","Ruby Slippers");
perfs.putInt("Companions",4);
perfs.putBoolean("Are there witches?", true);
int usageCount=perfs.getInt("UsageCount", 0);
usageCount++;
//System.out.println(usageCount);
perfs.putInt("UsageCount", usageCount);
for(String key:perfs.keys())
System.out.println(key+":"+perfs.get(key, null));
System.out.println("How many companions does Dorothy have? "+
perfs.getInt("Companions", 0));
}
}/*
location:0z
Footwear:Ruby Slippers
Companions:4
Are there witches?:true
UsageCount:5
How many companions does Dorothy have? 4
*/
java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例的更多相关文章
- 匿名对象序列化为XML
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...
- Phoenix简介概述,Phoenix的Java API 相关操作优秀案例
Phoenix简介概述,Phoenix的Java API 相关操作优秀案例 一.Phoenix概述简介 二.Phoenix实例一:Java API操作 2.1 phoenix.properties 2 ...
- 序列化为XML
java类序列化成xml 方法[转] 今天看了下JAVA序列化.还是一知半解.怎么也没有弄明白,怎么序列化成XML文件.处入半解状态.在网上找了很多,大部分是理论上的.没有实际的例子.功夫不负有心人, ...
- C#实体类序列化为XML
这两天,应要求做一个C/S的小程序,考虑到程序简洁小巧,存数据的方式不使用数据库,而是直接存入XML文档中保存.为了把复杂实体类里面的属性存入XML,我们可以使用C#有的反射机制,做一个简单的通用工具 ...
- Java 常用知识点汇总(数据类型之间转换、字符串的相关操作-截取、转换大小写等)
1.Java四类八种数据类型 byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围- ...
- asp.net webapi 序列化为xml 时实体属性增加<![CDATA[]]>防止特殊字符
有时webapi在序列化xml时,可能需要给某些带有html或特殊字符(如 < > & /)的字段加上<![CDATA[]]> 已防止影响xml正常数据,如果使用.as ...
- 【C#】使用C#将类序列化为XML
直接上代码: public static class XmlSerializer { public static void SaveToXml(string filePath, object sour ...
- 玩转Web之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析
最近做一个项目时,需要在dataGird中插入<input>,即文本输入框,当点击提交时,需要把文本框里填的数据返以及其他列的一些信息以json数组的格式返回到后台,虽然我实现了该功能,但 ...
- 《java入门第一季》之UDP协议下的网络编程小案例
需求,一台电脑发送数据,其他电脑都可以收到该数据.使用广播地址. 发送端: import java.io.BufferedReader; import java.io.IOException; imp ...
随机推荐
- 大数据学习——mapreduce共同好友
数据 commonfriends.txt A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D ...
- 大数据学习——hadoop2.x集群搭建
1.准备Linux环境 1.0先将虚拟机的网络模式选为NAT 1.1修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=itcast ### ...
- android AlertDialog常见使用
android AlertDialog常见使用 简单提示框: AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); aler ...
- QueenAttack
问题分析: 1.对于行和列,要求得每行或每列的棋子个数,只需要把横坐标或纵坐标相同的棋子数目相加即可,然后使用k*(k-1)/2就可求得攻击次数 2.对于对角线上的点,需要分析对角线上点的坐标关系.分 ...
- 视图中 jquery 使用data属性
示例:<input id='username' data-id="{$val['id']}" data-userName="{$val['name']}" ...
- DELL IDRAC API接口开发文档翻译及client模块
今天和DELL官网要了一份关于服务器IDRAC 版本7/8 的API开发文档,花了一天的时间,进行了翻译,不一定全部准确,但对于英语不好的人会有所帮助.也不用重复造轮子了.下载链接: IDRAC AP ...
- Django的form,model自定制
一.Form组件原理: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此django的forms类提供了全面的内容验证 ...
- BZOJ 1798:
6: LAZY 线段树有乘法的更新 #include <cstdio> #include <cstring> #include <algorithm&g ...
- java 定时备份数据库
原文:http://www.open-open.com/code/view/1447490829678 /** 操作数据库 */ public class BackupDb { public Stri ...
- Win7查看本地是否安装JDK及安装路径的方法
工具/原料 win7 方法/步骤 1 开始->点击运行,输入:cmd 2 然后在命令提示符中,输入:java -version 假如看到有版本提示那么安装成功 3 假如忘记了java ...