zoukankan      html  css  js  c++  java
  • java读取xml文件并转换成对象,并进行修改

    1.首先要写工具类,处理读取和写入xml文件使用的工具。XMLUtil.java
    import
    java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; /** * 封装了XML转换成object,object转换成XML的代码 * * @author mscall * */ 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); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); // 将对象转换成输出流形式的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); marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK"); // 将对象转换成输出流形式的xml // 创建输出流 FileWriter fw = null; try { fw = new FileWriter(path); } catch (IOException e) { e.printStackTrace(); } marshaller.marshal(obj, fw); } catch (JAXBException e) { e.printStackTrace(); } } /** * 将String类型的xml转换成对象 */ public static Object convertXmlStrToObject(Class<?> clazz, String xmlStr) { Object xmlObject = null; try { JAXBContext context = JAXBContext.newInstance(clazz); // 进行将Xml转成对象的核心接口 Unmarshaller unmarshal = context.createUnmarshaller(); StringReader sr = new StringReader(xmlStr); xmlObject = unmarshal.unmarshal(sr); } catch (Exception e) { e.printStackTrace(); } return xmlObject; } /** * 将file类型的xml转换成对象 */ public static Object convertXmlFileToObject(Class<?> clazz, String xmlPath) { Object xmlObject = null; try { JAXBContext context = JAXBContext.newInstance(clazz); Unmarshaller unmarshaller = context.createUnmarshaller(); InputStreamReader isr=new InputStreamReader(new FileInputStream(xmlPath),"GBK"); xmlObject = unmarshaller.unmarshal(isr); } catch (Exception e) { e.printStackTrace(); } return xmlObject; } }

     2、测试写入

    public static void test(){
    
        Users users = new Users(); 
    
        User u = new User(); 
    
        u.setUsername("admin");
    
        u.setPassword("123"); 
    
        List<User> lus = new ArrayList<>(); 
    
        lus.add(u); 
    
        users.setUserList(lus);
    
        try {
    
            XMLUtil.convertToXml(users, "C:/XML/users.xml");
    
        } catch (Exception e1) {
    
            e1.printStackTrace();
    
        }
    
     }

    3、测试读

    Users users = (Users) XMLUtil.convertXmlFileToObject(Users.class, "C:/XML/Users.xml");

    4、xml文件

    <?xml version="1.0" encoding="GBK" standalone="yes"?>
    
    <users>
    
        <user>
    
            <username>admin0</username>
    
            <password>123</password>
    
        </user>
    
        <user>
    
            <username>admin</username>
    
            <password>123</password>
    
        </user>
    
    </users>
  • 相关阅读:
    logback 指定每隔一段时间创建一个日志文件
    常用Linux命令
    Java stream的常见用法
    spring boot 整合js css 静态文件
    UnityWebRequest http post json通信
    spring boot 添加拦截器实现登陆检测
    游戏服务器业务处理线程管理
    netty如何实现零拷贝
    游戏服务器性能调优常用工具详解
    Java UTC时间与本地时间互相转换
  • 原文地址:https://www.cnblogs.com/wuxu/p/12843807.html
Copyright © 2011-2022 走看看