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>
end ------------------------------------------------------------------------------------------------------------------------