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 ...
随机推荐
- requests 模块笔记
import requests 请求方式: requests.get("https://www.baidu.com") requests.post("http://htt ...
- 如何查看Laravel版本号的三种方法
1.PHP artisan --version 2.vim vendor/laravel/framework/src/Illuminate/Foundation/Application.php 3:可 ...
- MySQL报错The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents
参考资料:https://blog.csdn.net/qq_37630354/article/details/82814330 在property里加上最后这个参数即可
- jmespath库解析json
在测试过程中,经常会去JSON中的某个值,jmespath可以是除了jsonpath的另外一种选择. 下面通过几个例子来说明jmespath在python的使用 jmespath python安装 非 ...
- 一个爬取lativ诚衣网站上模特穿搭图片的爬虫
show the code: [peter@localhost savvy]$ vi lativ.py # -*- coding:utf-8 -*- import requests,lxml,os f ...
- The more, The Better(树形DP)
Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有 ...
- Tsinghua OJ Zuma
Description Let's play the game Zuma! There are a sequence of beads on a track at the right beginnin ...
- poj1459多源多汇最大流问题
/*基本构图题,多源多汇,添加一个源点和一个汇点,所有源点都来自这个源点,同理,所有汇点 都汇于这个汇点,dinic第二战,本来应该1A的,犯了一个低级错误!while(scanf("%d) ...
- poj3648,2-sat求解
关键是题意的理解,英语,有时候明明每个字都认识,但是还是理解错误!哎!!悲剧啊!题意啊! 这是关键!开始误理解为n对新娘郞,非也!是只有一对,其他是夫妇,理解后就好做了,建立图 是关键,怎么转化关系, ...
- python学习之-- redis模块基本介绍
数据缓存系统: 1:mongodb:是直接持久化,直接存储于硬盘的缓存系统 2:redis: 半持久化,存储于内存和硬盘 3:memcache:数据只能存储在内存里的缓存系统关于memcache 学习 ...