首先是对象:
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;
}
}
分享到:
相关推荐
这通常涉及到Java的反射机制,通过分析XML节点来创建和初始化JavaBean对象。以下是一个简单的实现: 1. 解析XML字符串,得到XML的根元素。 2. 遍历XML的子元素,根据元素的标签名创建对应的JavaBean实例。 3. 使用...
`XMLEncoder`是一个用于将Java对象编码为XML输出流的类,它能够将对象的属性和结构转换为XML格式。而`XMLDecoder`则相反,它可以解析XML输入流并重建原始的Java对象。这两个工具使得在XML和Java对象之间进行序列化和...
总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java反射API、XML解析(DOM、SAX、StAX、JAXB),以及对象的序列化和反序列化。在实际开发中,我们需要根据项目需求选择合适的工具和方法,确保数据的准确...
在.NET框架中,泛型、XML和反射是三个非常重要的概念,它们在处理数据和对象时发挥着关键作用。在给定的标题和描述中,我们看到这些技术被结合使用,实现了自定义类型集合的XML序列化和反序列化。 首先,让我们了解...
Betwixt基于JavaBeans规范,通过反射和注解来实现XML和Java对象之间的映射。它通过分析Java类的结构来生成XML,或者根据XML的结构来创建Java对象实例。在处理相同节点名的情况下,Betwixt允许我们通过属性名和类型来...
通过这种方式,我们可以利用DOM4J解析XML文件,同时借助Java反射机制将解析结果动态地映射到自定义的Java类中。这在处理XML数据时提供了很大的灵活性,尤其在需要将XML数据与业务对象关联时,反射机制显得尤为重要。
在描述中提到,“利用反射和泛型实现了动态导出List到xml”,这意味着代码可能首先创建了一个List对象,其中包含了各种类型的实例。通过反射,程序可以访问这些对象的属性,获取它们的值,然后使用DOM4J将这些值转化...
在Java开发中,数据序列化和反序列化是一项常见的任务,它允许我们将对象的状态转换为持久化的格式(如XML或JSON),以便存储或传输。XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入...
总结来说,Java反射提供了在运行时动态操作类和对象的能力,而Digester则是简化XML到Java对象映射的工具。两者结合使用,可以在程序运行过程中根据XML配置动态地创建和配置对象,增强了Java代码的灵活性和可扩展性。...
为了将一个Java对象转换成XML,首先需要创建该对象实例,然后使用XStream的`toXML()`方法: ```java import com.thoughtworks.xstream.XStream; public class Person { private String name; private int age; ...
Java是一种广泛使用的编程语言,其I/O(输入/输出)、反射、XML处理和JVM(Java虚拟机)等技术在日常开发中扮演着重要角色。本文将深入探讨这些技术及其应用。 首先,让我们来了解Java的反射机制。反射是Java提供的...
ResultSet是数据库查询结果的载体,JSON是一种轻量级的数据交换格式,而List是Java集合框架中的动态数组。本文将详细介绍如何在Java中将ResultSet转换为JSON,以及如何将JSON转换为List。 首先,我们来探讨如何将...
反射工厂配合XML配置,可以实现动态加载和管理类,从而在不重新编译代码的情况下添加新功能,提高软件的灵活性和可扩展性。本DEMO将深入探讨如何利用反射和XML配置来实现这一目标。 首先,让我们了解什么是反射。在...
它通过反射和类型安全的转换来实现对象到XML的转换,以及从XML到对象的还原。在转换过程中,Xstream会根据对象的字段和属性创建XML元素和属性。通过使用自定义的转换器,你可以控制这个过程,以便处理特定类型的对象...
反射是.NET框架提供的一种强大功能,允许运行时检查类型信息,并能动态地创建对象和调用方法。在本项目中,程序会读取`FormConfig.xml`,解析XML中的控件定义,然后通过反射找到对应的控件类型,并实例化这些控件。...
它通过反射机制来读取对象的信息,并将其转化为XML格式,反之亦然。XStream提供了丰富的API接口,使得开发者能够轻松地定制转换规则,支持各种复杂的Java对象结构。 #### 二、基本使用 1. **创建XStream实例** ...
xStream的核心思想是通过反射和类型映射来实现对象与XML之间的转换。它使用一种称为“annoation”的机制,允许开发者自定义XML的元素和属性名,以匹配Java对象的字段。这样,即使Java对象的结构复杂,xStream也能...
- `xom-1.0.jar`: XML对象模型库,可能用于XML和JSON之间的转换。 以上就是`JSONUtil`类的主要工作原理和相关知识点,通过这个工具类,开发者可以在Java应用中方便地将各种类型的对象转换为JSON字符串,便于数据...
使用XmlSerializer的优点在于它不需要对象实现特定的接口,如ISerializable,而是直接通过反射分析对象的属性和字段来生成XML。 2. **序列化过程**:要使用XmlSerializer进行序列化,首先需要创建一个XmlSerializer...
- **保存XML**:最后,使用`Document`对象的`asXML()`方法将XML结构转换成字符串,再写入文件。 例如,`CreateXml.java`可能包含以下代码片段: ```java DocumentFactory factory = DocumentFactory.getInstance()...