JAVA实现XML文件读写
2018-04-10 本文已影响20人
WebGiser
项目结构,如图所示:
image.png
XML文件读取
1、在D盘下制作测试数据Users.xml文件,具体如下:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user index="1">
<name>tom</name>
<password>12345</password>
</user>
<user index="2">
<name>jack</name>
<password>abc</password>
</user>
<user index="3">
<name>john</name>
<password>www</password>
</user>
</users>
2、新建对应的Users.java类,具体如下:
public class Users {
private String name;
private String password;
public Users() {
}
public Users(String name, String password) {
this.name = name;
this.password = password;
}
@Override
public String toString() {
return "Users{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3、xml读取方法如下:
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ReadXML {
/*
*filePath:xml文件路径
*/
public List<Users> readXml(String filePath) throws IOException {
List<Users> list = new ArrayList<Users>();
InputStream in = null;
// 解析xml文档内容
try {
SAXReader reader = new SAXReader();
in = new FileInputStream(new File(filePath));
Document doc = reader.read(in);
//获取根节点
Element root = doc.getRootElement();
List<Element> usersElem = root.elements();
System.out.println("用户数量:"+usersElem.size());
for (Element userElem : usersElem) {
//获取user的index属性值
String index = userElem.attribute("index").getValue();
System.out.println("用户下标:"+index);
List<Element> textElem = userElem.elements();
Users user = new Users();
user.setName(textElem.get(0).getText()); //获取name文本值
user.setPassword(textElem.get(1).getText()); //获取password文本值
list.add(user);
}
} catch (Exception e) {
System.out.println("error: "+ e);
return null;
} finally {
in.close();
}
return list;
}
}
4、功能测试:
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class ReadXMLTest {
@Test
public void readXml() throws IOException {
ReadXML readXML = new ReadXML();
List<Users> list = readXML.readXml("D:\\Users.xml");
list.toString();
}
}
xml文件写入
1、写入方法,具体如下:
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
public class WriteXML {
/*
*path:要写入数据的xml文件:D:\\123.xml
*list:Users集合
*/
public boolean createUserDotXML(String path,List<Users> list) throws IOException {
boolean flag = true;
OutputStream outputStream = null;
XMLWriter xmlWriter = null;
Document document = null;
try {
//创建document文档
document = DocumentHelper.createDocument();
//创建根节点
Element rootElem = DocumentHelper.createElement("users");
//将list里的值循环写入Element中
for(int i=0;i<list.size();i++){
Element userElem = DocumentHelper.createElement("user");
Element nameElem = DocumentHelper.createElement("name");
Element passElem = DocumentHelper.createElement("password");
nameElem.addText(list.get(i).getName());
passElem.addText(list.get(i).getPassword());
userElem.addAttribute("id",String.valueOf(i+1));
userElem.add(nameElem);
userElem.add(passElem);
rootElem.add(userElem);
}
document.add(rootElem);
OutputFormat outputFormat = new OutputFormat();
outputFormat.setEncoding("UTF-8");
outputStream = new FileOutputStream(path);
xmlWriter = new XMLWriter(outputStream,outputFormat);
xmlWriter.write(document);
} catch (IOException e){
System.out.println("io Exception:"+ e);
return false;
} catch (Exception e){
System.out.println("Exception:"+ e);
return false;
} finally {
xmlWriter.close();
outputStream.close();
}
return flag;
}
}
2、功能测试,具体如下:
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class WriteXMLTest {
@Test
public void createUserDotXML() {
WriteXML writeXML = new WriteXML();
List<Users> list = new ArrayList<Users>();
list.add(new Users("aaa","111"));
list.add(new Users("bbb","222"));
list.add(new Users("ccc","333"));
try {
writeXML.createUserDotXML("D:\\123.xml",list);
} catch (IOException e) {
e.printStackTrace();
}
}
}
pom.xml项目依赖,具体如下:
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>