`
yangsongjing
  • 浏览: 243919 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

反射---动态的把对象和list转成xml

阅读更多

首先是对象:
UserBean o = new UserBean();
o.setUId(1);
o.setUName("ysj");
o.setUdesc("男的");
list.add(o);
FileUtil.getValue(UserBean.class,o);

public static <T> List<T> getValue(Class<T> t, Object o)
throws InstantiationException, IllegalAccessException,
IntrospectionException, IllegalArgumentException,
InvocationTargetException {
File file = new File("d:\\test\\a.xml");
Field[] fields = t.getDeclaredFields();
StringBuffer sb = new StringBuffer();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sb.append("<roots>");
for (Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(),t);
sb.append("<"+f.getName()+">").append(pd.getReadMethod().invoke(o)).append("</"+f.getName()+">");
// 写数据
pd.getWriteMethod().invoke(t.newInstance(), pd.getReadMethod().invoke(o));

}
sb.append("</roots>");
System.out.println(sb);
return null;
}

只要此方法不管对象怎么变都能写入很方便不用因为传入的对象不同而且重载;

下面的就是list:
List<UserBean> list = new ArrayList<UserBean>();
for(int i=0;i<5;i++){
UserBean o = new UserBean();
o.setUId(i);
o.setUName("ysj"+i);
o.setUdesc("男的"+i);
list.add(o);
}

FileUtil.getValue(UserBean.class,list);


import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.NodeList;

public class FileUtil {

public static <T> void setValue(Class<T> t, List<T> list)
throws InstantiationException, IllegalAccessException,
IntrospectionException, IllegalArgumentException,
InvocationTargetException {
File file = new File("d:\\"+ t.getName() +".xml");
Field[] fields = t.getDeclaredFields();
StringBuffer sb = new StringBuffer();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sb.append("<roots>");
for(int i=0;i<list.size();i++){
sb.append("<root>");
for (Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(),t);
sb.append("<"+f.getName()+">").append(pd.getReadMethod().invoke(list.get(i))).append("</"+f.getName()+">");
// 写数据
// pd.getWriteMethod().invoke(t.newInstance(), pd.getReadMethod().invoke(list.get(i)));
}
sb.append("</root>");
}
sb.append("</roots>");
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
outputStream.write(sb.toString().getBytes("UTF-8"));
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {

}
}

System.out.println(sb);
}

public static <T> List<T> getValue(Class<T> t){
String filePath = "d:\\"+ t.getName() +".xml";
List<T> list = new ArrayList<T>();
org.w3c.dom.Document document = null;
Field[] fields = t.getDeclaredFields();
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(new File(filePath));
if(document == null){
return null;
}
NodeList node = (document).getChildNodes().item(0).getChildNodes();
for(int i = 0;i<node.getLength();i++){
T _t = t.newInstance();
for (Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(),t);
if(pd.getPropertyType().equals(Integer.TYPE)){

Method method = t.getMethod(pd.getWriteMethod().getName(),int.class);
method.invoke(_t, Integer.parseInt((document).getDocumentElement()
.getElementsByTagName(f.getName()).item(i).getTextContent()));

}else if(pd.getPropertyType().equals(Boolean.TYPE)){

Method method = t.getMethod(pd.getWriteMethod().getName(),boolean.class);
method.invoke(_t, Boolean.parseBoolean((document).getDocumentElement()
.getElementsByTagName(f.getName()).item(i).getTextContent()));

}else{

Method method = t.getMethod(pd.getWriteMethod().getName(),
String.class);
method.invoke(_t, (document).getDocumentElement()
.getElementsByTagName(f.getName()).item(i).getTextContent());
}
}
list.add(_t);
}
} catch (Exception e) {
System.out.println("e-->"+e);
}
return list;
}

}
1
6
分享到:
评论

相关推荐

    JAVA对象序列化保存为XML文件的工具类

    在java.beans包中,有两个好东西,XMLEncoder和XMLDecoder。从XML存取对象真是太费力气啦。做了小工具类,以后可以用用了。本文介绍了这两个可以把JAVA对象序列化保存为XML文件的工具类。

    Tomcat解析XML和反射创建对象原理

    下面通过实例代码给大家介绍Tomcat解析XML和反射创建对象原理,具体代码如下所示: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; import org....

    使用反射技术和Facade模式演示封装数据库操作--ORM原理

    于是,使用Facade模式和反射技术模拟Hibernate框架技术演示怎样书封装数据库的操作。 环境:Windows XP Professional, JDK 1.6, Eclipse 3.3 Europa, SQL Server 2000 使用步骤: 1. 下载解压之后,使用Eclipse导入...

    Spring-IOC手动模拟实现-利用dom4解析xml文件

    /*模拟spring的实现 * 1.通过构造器获取配置文件 * 2.通过dom4j解析配置文件,得到list集合(存放Bean标签的id和class属性) * 3.通过反射实例化得到对应的实例化对象,放置...底层工厂方法+反射(动态调用方法和属性)

    DWR.xml配置文件说明书(含源码)

    仅仅通过反射方法没有办法知道集合元素中的类型,所以上面的两个converter能将任何集合转换成相对javascript而言有意义的对象.然而没有办法将不同的集合类类型分别采用不同的转换方法.因为没有办法完全自动进行转换,...

    C#学习笔记_20100614

    在 C#中遍历和排序对象集合 StringWriter实现的一个功能 创建一个文本文件并写入文本 序列化对象到文件 创建一个文本文件并写入文本 文件夹拷贝 使用C#解析简单XML 读 XML文件 用 XmlWriter写 XML文件 插入数据到 ...

    Java开发常用jar包

    1.commons-beanutils.jar...12.commons-DbUtils.jar:Apache组织提供的一个资源JDBC工具类库,它是对JDBC的简单封装,对传统操作数据库的类进行二次封装,可以把结果集转化成List。 13.commons-Email.jar: 提供开源的API

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     B.2 运用反射机制来持久化Java对象 附录C 用XDoclet工具生成映射文件  C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行...

    C#入门——面向对象等,代码+注释

    第10天 03_List泛型集合 04_Dictionary 05泛型集合练习 06文件流 FileStream 07StreamReader和StreamWriter 02 file类 01 path类。File.ReadAllBytes 第11天 02 抽象类 Animal Cat Dog Program 02-抽象类 Animal ...

    aspnet公共类cs文件.rar

    (SpecialDirectories.cs)简单的Word操作对象(WordCombineUtil.cs)这个类提供了一些实用的方法来转换XML和对XmlConvertor.cs)XML操作类(XmlHelper.cs) ----------Format-------------- 参数验证的通用验证程序。...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    WHC第三方控件

    16. 这个类提供了一些实用的方法来转换XML和对象。(XmlConvertor.cs) 17. XML操作类(XmlHelper.cs) ----------Format-------------- 1. 参数验证的通用验证程序。(ArgumentValidation.cs) 2. 这个类提供了实用...

    DotNet公用类(超多附文档)

    16.这个类提供了一些实用的方法来转换XML和对象。(XmlConvertor.cs) 17.XML操作类(XmlHelper.cs) ----------Format-------------- 1.参数验证的通用验证程序。(ArgumentValidation.cs) 2.这个类提供了实用方法的...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    DWR开发包常规客户端服务器端面向对象编程

    -- 通过Spring反射对象 --&gt; &lt;/allow&gt; 客户端引用: ()%&gt;/dwr/interface/JString.js'&gt; ()%&gt;/dwr/interface/JDate.js'&gt; ()%&gt;/dwr/interface/TestService.js'&gt; ()%&gt;/dwr/engine.js'&gt; ()%&gt;/dwr/util.js'&gt; ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     B.2 运用反射机制来持久化Java对象 附录C 用XDoclet工具生成映射文件  C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     B.2 运用反射机制来持久化Java对象 附录C 用XDoclet工具生成映射文件  C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     B.2 运用反射机制来持久化Java对象 附录C 用XDoclet工具生成映射文件  C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行...

Global site tag (gtag.js) - Google Analytics