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>