网站链接: 我爱捣鼓
当前位置: 首页 > web开发 > JAVA

​Java开发常用类-XML序列化反序列化XMLUtil类

2022/11/16 21:26:57

为了提高大家开发java项目的效率,我们特意把Java开发常用类进行了整理,直接拿去就能用,今天我们给大家提供的是XML序列化反序列化XMLUtil类。import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.x…

      为了提高大家开发java项目的效率,我们特意把Java开发常用类进行了整理,直接拿去就能用,今天我们给大家提供的是XML序列化反序列化XMLUtil类。

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.io.*;
public class XMLUtil {
    /**
     * 将对象直接转换成String类型的 XML输出
     *
     * @param obj
     * @return
     */
    public static String convertToXml(Object obj) {
        // 创建输出流
        StringWriter sw = new StringWriter();
        try {
            // 利用jdk中自带的转换类实现
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
            // 格式化xml输出的格式
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                    Boolean.TRUE);
            // 将对象转换成输出流形式的xml
            marshaller.marshal(obj, sw);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return sw.toString();
    }
    /**
     * 将对象根据路径转换成xml文件
     *
     * @param obj
     * @param path
     * @return
     */
    public static void convertToXml(Object obj, String path) {
        try {
            // 利用jdk中自带的转换类实现
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
            // 格式化xml输出的格式
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                    Boolean.TRUE);
            // 将对象转换成输出流形式的xml
            // 创建输出流
            FileWriter fw = null;
            try {
                fw = new FileWriter(path);
            } catch (IOException e) {
                e.printStackTrace();
            }
            marshaller.marshal(obj, fw);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
    @SuppressWarnings("unchecked")
    /**
     * 将String类型的xml转换成对象
     */
    public static <T> T convertXmlStrToObject(Class<T> clazz, String xmlStr) {
        T xmlObject = null;
        try {
            JAXBContext context = JAXBContext.newInstance(clazz);
            // 进行将Xml转成对象的核心接口
            Unmarshaller unmarshaller = context.createUnmarshaller();
            StringReader sr = new StringReader(xmlStr);
            XMLInputFactory xif = XMLInputFactory.newFactory();
            XMLStreamReader xsr = xif.createXMLStreamReader(sr);
            xmlObject = unmarshaller.unmarshal(xsr, clazz).getValue();
        } catch (JAXBException e) {
            e.printStackTrace();
        } catch (XMLStreamException e) {
            e.printStackTrace();
        }
        return xmlObject;
    }
    @SuppressWarnings("unchecked")
    /**
     * 将file类型的xml转换成对象
     */
    public static <T> T convertXmlFileToObject(Class<T> clazz, String xmlPath) {
        T xmlObject = null;
        try {
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            FileReader fr = null;
            try {
                fr = new FileReader(xmlPath);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            XMLInputFactory xif = XMLInputFactory.newFactory();
            XMLStreamReader xsr = xif.createXMLStreamReader(fr);
            xmlObject = unmarshaller.unmarshal(xsr, clazz).getValue();
        } catch (JAXBException e) {
            e.printStackTrace();
        } catch (XMLStreamException e) {
            e.printStackTrace();
        }
        return xmlObject;
    }
}


相关资讯

  • 为什么放弃JDBC使用MyBatis?

    为什么用MyBatis? 我们作为一个程序员,主要工作归根结底就是和数据打交道。而使用 java 操作数据库的原始方式就是 JDBC。 先看看使用 JDBC 方式是如何操作数据库的:// 1. 加载配置文件Properties pro=new Properties();pro.load(new FileReader("r…

    2022/11/30 13:05:54
  • springboot项目设置session生命周期时间的几种方法?

    java开发的springboot项目设置session生命周期时间的方法有三种,今天我们就来说说这三种方法。一丶修改Tomcat配置web.xml文件 在Tomcat服务器对应conf配置文件夹下的web.xml文件中修改<session-time-out></session-time-out>中的值. Tomcat默…

    2022/11/12 12:35:20
  • 图文教程一步一步教你在​idea中使用svn如何创建分支?

    我们在用idea开发java项目时需要通过svn创建项目分支,这样更高效率的开发新的项目,今天我们就通过图文教程一步一步教你idea中如何创建分支?第一步第二步第三步 通过以上内容我们知道了在idea中使用svn如何创建分支。感谢您访问“我爱捣鼓(www.woaidaogu.com)”…

    2022/11/12 12:23:28
  • java函数中如何返回多个值?

    我们一般在写java函数时只会返回一个值,但有时我们需要在函数中返回多个值应该怎么办呢?使用数组 数组可用于返回基本数据类型和引用数据类型。 例如,下面的getCoordinates方法返回double数组:double[] getCoordinatesDoubleArray() { double[] coordi…

    2022/11/8 22:08:01