就两个工具类而已,实际中应该比较实用。Json就不说了,xml主要是有类似java跟flash交互的情况下就会用的着。Json的是网上找的,Xml的是自己写的。JSON转换apache官网有个工具包,但是就为了这么个小功能去下几个工具包感觉有点浪费,而且有很多依赖包。
这里贴一下XmlHelper的代码吧。
package com.caedmon.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XmlHelper {
private String filename;
private Document document;
static Logger logger=Logger.getLogger(XmlHelper.class);
/**
* 路径的包含的xml文件只需要有根节点就可,否则不是合法的xml文件无法解析
* */
public XmlHelper(String filename){
this.filename=filename;
SAXReader reader = new SAXReader();
File file = new File(filename);
InputStream is=null;
try {
is = new FileInputStream(file);
this.document=reader.read(is);
} catch (FileNotFoundException e) {
logger.info("未找到"+filename+"这个文件");
} catch (DocumentException e) {
logger.error(e);
}
}
/**
* 清除原来根节点中的内容,如果保存之前不清楚的话,是在文档后追加,而不是重新写入
*/
public void clear(){
document.getRootElement().clearContent();
}
/**
* 保存xml到指定路径
* */
public void save(String filename) throws IOException{
//此处最好不要用FileWriter,会出现中文乱码
XMLWriter out = new XMLWriter(new FileOutputStream(this.filename));
out.write(document);
out.flush();
out.close();
}
public XPath getXPath(Element element, String nsUrl, String nsName, String selectUrl){
Map nsMap = new HashMap();
nsMap.put(nsName, nsUrl);
XPath xPath = element.createXPath(selectUrl);
xPath.setNamespaceURIs(nsMap);
return xPath;
}
public void save() throws IOException{
save(this.filename);
}
/**
* 将指定对象转成xml表达的字符串
* */
public String format(Object object){
Element element=document.getRootElement();
try{
if(
object instanceof Integer||
object instanceof Double||
object instanceof String||
object instanceof Character||
object instanceof Byte||
object instanceof Long||
object instanceof Float||
object instanceof Short
){
throw new IllegalArgumentException();
}else if(object instanceof List<?>){
insertList(element, (List<?>)object);
}else if(object instanceof Map<?, ?>){
insertMap(element, (Map<?,?>)object);
}else if(object instanceof Set<?>){
insertSet(element, (Set<?>)object);
}else if(object instanceof Object[]){
insertArray(element, (Object[])object);
}else {
insertObject(element,object);
}
}catch(IllegalAccessException e1){
e1.printStackTrace();
}catch(IllegalArgumentException e2){
e2.printStackTrace();
}
return document.asXML();
}
public static Element insertObject(Element element,Object object) throws IllegalArgumentException, IllegalAccessException{
if(object!=null){
Class<?> clazz=object.getClass();
//类节点的名字
String classEName=toLowerHead(clazz.getSimpleName());
Field[] fields=clazz.getDeclaredFields();
Element classElement=element.addElement(classEName);
for(Field field:fields){
String name=field.getName();
field.setAccessible(true);
Object fieldObj=field.get(object);
if(fieldObj==null){
classElement.addAttribute(name, "");
}else if(
fieldObj instanceof Integer||
fieldObj instanceof Double||
fieldObj instanceof String||
fieldObj instanceof Character||
fieldObj instanceof Byte||
fieldObj instanceof Long||
fieldObj instanceof Float||
fieldObj instanceof Short
){
String value=field.get(object).toString();
classElement.addAttribute(name, value);
}else if(fieldObj instanceof Date){
Date date=(Date)fieldObj;
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String value=format.format(date);
classElement.addAttribute(name, value);
}else{
Element child=classElement.addElement(name);
if(fieldObj instanceof List<?>){
insertList(child, (List<?>)fieldObj);
}else if(fieldObj instanceof Map<?, ?>){
insertMap(child, (Map<?,?>)fieldObj);
}else if(fieldObj instanceof Set<?>){
insertSet(child, (Set<?>)fieldObj);
}else if(fieldObj instanceof Object[]){
insertArray(child, (Object[])fieldObj);
}else {
insertObject(child,fieldObj);
}
}
}
}
return element;
}
public static Element insertList(Element element,List<?> list) throws IllegalArgumentException, IllegalAccessException {
for(Object object:list){
insertObject(element, object);
}
return element;
}
public static Element insertMap(Element element,Map<?, ?> map) throws IllegalArgumentException, IllegalAccessException{
Iterator<?> iterator=map.values().iterator();
while(iterator.hasNext()){
Object object=iterator.next();
insertObject(element, object);
}
return element;
}
public static Element insertSet(Element element,Set<?> set) throws IllegalArgumentException, IllegalAccessException{
Iterator<?> iterator=set.iterator();
while(iterator.hasNext()){
Object object=iterator.next();
insertObject(element, object);
}
return element;
}
public static Element insertArray(Element element,Object[] array) throws IllegalArgumentException, IllegalAccessException {
for(Object obj:array){
insertObject(element, obj);
}
return element;
}
public static String toLowerHead(String simpleName){
String begin=simpleName.substring(0,1).toLowerCase();
String other=simpleName.substring(1,simpleName.length());
return begin+other;
}
}
有什么问题的话可以提出来,我也是才写出来没多久,可能会有问题的。。如果哪里不懂的话也可以问下,毕竟注释比较少。。
PS:东西比较简单,高抬贵手,别投隐藏,新手。。 就是让大家以后省点功夫。。
分享到:
相关推荐
通过fastjson实现了JavaBean,list<JavaBean>,MAP,list等格式与json格式之间的转换,已经附带fastjson的包,包的版本为fastjson-1.1.36.jar
javaBean 与 xml 互转,提供工具类。只需要把需要转换的类放入,就可以。使用。
java开发中常用的工具类 比如 1:hibernate的配置 工具类复写 2:字符串加密 MD5加密 3:javabean到map的自动映射封装 4:javabean java对象到xml的自动封装 5:各种日期格式的处理 6:json的自动封装处理 7:...
xstream可以完美转换xml,与以往的解析xml工具dom相比,xstream是一个易用的、开源 的库,使用起来简单、小巧,容易理解,可以轻易的将java对象和xml文档相互转换,而 且可以修改某个特定的属性和节点名称。...
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...
代替使用XML或JSON序列化,将数据集生成为Java语言。 此格式更适合于性能和重构目的。 技术支持 基本类型及其包装器类 枚举 馆藏与地图 数组(1维和2维) java.util.Date,java.sql.Date,日历,...
//给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...
//给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...
第一部分 Strut 2:一个全新的框架 第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 ...
快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。 使用方法:快捷键Alt+S也可以使用Alt+Insert选择GsonFormat 2.Android ButterKnife Zelezny 配合ButterKnife实现注解,...
20.1 DSL 示例:Scala中XML和JSON DSL 404 20.2 内部DSL 406 20.3 包含解析组合子的外部DSL 410 20.3.1 关于解析组合子 410 20.3.2 计算工资单的外部DSL 410 20.4 内部DSL与外部DSL:最后的思考 ...
Json解析工具 JDBC封装模板 Bean实例注册 MyBean框架可以通过注解、xml配置文件、properties配置文件三种方式注册一个Bean实例,被注册的Bean实例会进入MyBean框架的核心容器之中。 注解 1、在Java类上标注@MyBean...
8、写一个struts.xml 包含use.xml 1)跳转到 /user/register_form.jsp <result name="form">/user/register_form.jsp 完善action。 <param name="inputName">image <result name="success" type="...
8、写一个struts.xml 包含use.xml 1)跳转到 /user/register_form.jsp <result name="form">/user/register_form.jsp 完善action。 <param name="inputName">image <result name="success" type="...
{4.8}Collections集合工具类}{86}{section.4.8} {4.9}Comparable与Comparator}{86}{section.4.9} {4.9.1}Comparable}{86}{subsection.4.9.1} {4.9.2}Comparator}{87}{subsection.4.9.2} {4.10}包装类}{87}{...