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 ...
随机推荐
- solr之windws下搭建solr服务
安装Solr 首先保证已经正确安装了Java 下载Solr,当前最新版6.1.0 Solr各个版本下载地址 Solr从6.0之后需要Java1.8所以如果使用Solr6.0及其以上版本,请确保Java ...
- 【51nod 1791】 合法括号子段
有一个括号序列,现在要计算一下它有多少非空子段是合法括号序列. 合法括号序列的定义是: 1.空序列是合法括号序列. 2.如果S是合法括号序列,那么(S)是合法括号序列. 3.如果A和B都是合法括号序列 ...
- wps左侧显示目录
单击视图----文档结构图,在下拉选项中选择靠左即可,如图所示
- hexo干货系列:(六)hexo提交搜索引擎(百度+谷歌)
前言 能看到这里,说明大家都跟我一样,已经把博客搭起来并洋洋洒洒写了几篇博文,正春风得意感觉良好的时候,搭建博客有屎以来最大的危机出现在没有准备的我面前,百度+谷歌都无法搜索到我的博客.装逼还没几天就 ...
- 洛谷P4219 - [BJOI2014]大融合
Portal Description 初始有\(n(n\leq10^5)\)个孤立的点,进行\(Q(Q\leq10^5)\)次操作: 连接边\((u,v)\),保证\(u,v\)不连通. 询问有多少条 ...
- hdu 4923 Room and Moor [ 找规律 + 单调栈 ]
传送门 Room and Moor Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...
- 通过复制现有的redhat虚拟机的文件,实现在VMWare8.0上重建一个新的redhat虚拟机环境
1.将需要复制的redhat虚拟机的文件都存放在一个新的文件夹redhat下,因为虚拟机很大,所以复制可能花费较长的时间. 2.复制完成后,打开VMWare,选择“Open a Virtual Mac ...
- poj3259,简单判断有无负环,spfa
英语能力差!百度的题意才读懂!就是一个判断有无负环的题.SPFA即可.,注意重边情况!! #include<iostream> //判断有无负环,spfa #include<queu ...
- Swift 了解
本篇仅于个人小记,记录个人不熟悉的知识点儿.如若要了解更全,请前往如下网址:http://www.runoob.com/swift/swift-arrays.html 1.Swift 标记 分号:Sw ...
- [Android] 随时拍图像处理部分总结及源码分享
http://blog.csdn.net/eastmount/article/details/45492065#comments [Android] 图像各种处理系列文章合集 http://blog. ...