JAVA我爱编程

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>
上一篇下一篇

猜你喜欢

热点阅读