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>
原文地址:https://www.cnblogs.com/wuxu/p/12843807.html