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 ...
随机推荐
- 剑指Offer(书):剪绳子
题目:给你一根长度为n的绳子,请把绳子剪成m段,每段绳子的长度记为k[0],k[1]....,k[m].请问k[0]xk[1]x...,k[m]可能的最大乘积是多少.例如:长度为8剪成2 3 3 得到 ...
- sql中Distinct&Count的用法
Distinct作用:消除重复的数值 1.如: select id from T1 select distinct id from T1 二者的检索效果如下: distinct可以用来修饰多列,如: ...
- luogu2261 [CQOI2007]余数求和
除法分块. 猜想: 记 \(g(x)=\lfloor k / \lfloor k / x\rfloor \rfloor\),则对于 \(i \in [x,g(x)]\),\(\lfloor k / i ...
- InnoDB透明页压缩与稀疏文件
此文已由作者王慎为授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MySQL 5.7中包括了很多让人耳目一新的新特性,其中就包括了InnoDB Transparent Pag ...
- 【ITOO 4】WCF中,分布式事务处理
导读:事务可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.在项目中,就有 ...
- HDU 4641
动态更新后缀自动机,每次不断依据当前添加的节点不断往前寻找父节点上字符串最多可出现的次数 这里为了减少运算,当父节点已经达到k次就不在往前寻找,因为之前的必然达到k次,也已经统计在内 #include ...
- 【优先级队列】Southwestern Europe Regional Contest Canvas Painting
https://vjudge.net/contest/174235#problem/D [题意] 给定n个已知size的帆布,要给这n块帆布涂上不同的颜色,规则是这样的: 每次选择一种颜色C 对于颜色 ...
- 调用BOS服务保存一个单据的简化示例
IMetaDataService metadataService = ServiceHelper.GetService<IMetaDataService>(); // 加载元数据 Form ...
- SpringBoot自定义Filter
SpringBoot自定义Filter SpringBoot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,当然我们可以自定 义F ...
- python学习之-- shelve模块
shelve模块定义:是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle(因为封装了pickle)可支持的python数据格式.功能:可以实现pickle的多次dump和多次 ...