Java:读写Excel和xml文件

309 阅读2分钟

一、读写Excel

<!-- 对office软件读写功能   -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>
package com.lemon.json;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class POIDemo {
    /*
     * 读:
     * 1、打开Excel
     * 2、选择sheet
     * 3、读取行
     * 4、读取列
     * 5、修改内容
     * 6、回写Excel
     * */
    public static void main(String[] args) throws IOException, InvalidFormatException {
        FileInputStream fis = new FileInputStream("src/test/resources/测试用例.xls");
        // Factory 创建xx类的。workbook等于整个Excel
        Workbook workbook = WorkbookFactory.create(fis);
        // 获取第一个sheet页
        Sheet sheet = workbook.getSheetAt(0);
        // 获取最后一行。使用普通for和增强for循环
        int lastRowNum = sheet.getLastRowNum();
        for (int i = 0; i <= lastRowNum; i++) {
            // 获取行
            Row row = sheet.getRow(i);
            short lastCellNum = row.getLastCellNum();
            for (int j = 0; j < lastCellNum; j++) {
                // 获取单元格
                Cell cell = row.getCell(j, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
                // 将单元格数据转为String类型
                cell.setCellType(CellType.STRING);
                // 修改单元格
//                cell.setCellValue("3000");
                // 回写
//                FileOutputStream fos = new FileOutputStream("src/test/resources/测试用例2.xls");
//                workbook.write(fos);
                //获取单元格数据
                String value = cell.getStringCellValue();
                System.out.print(value + " ");
            }
            System.out.println();
        }
        //关流
        fis.close();
    }

}
项目 模块 用例id 用例描述 请求url 请求方式 请求数据 预期结果 返回报文 测试结果 测试人员 
白羊座 登录 login_1 正常登录 http://api.nnzhp.cn/api/user/login POST username=niuhanyang&passwd=aA123456 error_code=0    
白羊座 登录 login_2 不传账号 http://api.nnzhp.cn/api/user/login POST passwd=123456 error_code=3001    
白羊座 登录 login_3 不传密码 http://api.nnzhp.cn/api/user/login POST username=niuhanyang error_code=3008    

二、读写xml

<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.0.0</version>
</dependency>
package com.lemon.json;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


/*
 *  DOM4J类
     DOM4J定义了几个Java类。以下是最常见的类:
     Document - 表示整个XML文档。文档Document对象是通常被称为DOM树。
     Element - 表示一个XML元素。 Element对象有方法来操作其子元素,它的文本,属性和名称空间。
     Attribute - 表示元素的属性。属性有方法来获取和设置属性的值。它有父节点和属性类型。
     Node - 代表元素,属性或处理指令
 
    常见DOM4J的方法
     当使用DOM4J,还有经常用到的几种方法:
     SAXReader.read(xmlSource)() - 构建XML源的DOM4J文档。
     Document.getRootElement() - 得到的XML的根元素。
     Element.node(index) - 获得在元素特定索引XML节点。
     Element.attributes() - 获取一个元素的所有属性。
     Node.valueOf(@Name) - 得到元件的给定名称的属性的值。
 *
 * */

public class ParseXmlDemo {

    public void readXML() throws Exception {
        // 创建saxReader对象
        SAXReader reader = new SAXReader();
        // 通过read方法读取一个文件 转换成Document对象
        Document document = reader.read(new File("src/test1.xml"));
        // 获取根节点元素对象
        Element node = document.getRootElement();
        // 遍历所有的元素节点
        listNodes(node);
        elementMethod(node);
    }

    public void createXML() throws Exception {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("cars");
        Element supercarElement = root.addElement("supercars").addAttribute("company", "Ferrai");
        supercarElement.addElement("carname").addAttribute("type", "FerrariAttr").addText("FerrariText");
        supercarElement.addElement("carname").addAttribute("type", "sportsAttr").addText("sportsText");
        // 写入到一个新的文件中
        writer(document);
    }

    /**
     * 把document对象写入新的文件
     *
     * @param document
     * @throws Exception
     */
    public void writer(Document document) throws Exception {
        // 紧凑的格式
        // OutputFormat format = OutputFormat.createCompactFormat();
        // 排版缩进的格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        // 设置编码
        format.setEncoding("UTF-8");
        // 创建XMLWriter对象,指定了写出文件及编码格式
        // XMLWriter writer = new XMLWriter(new FileWriter(new
        // File("src//a.xml")),format);
        XMLWriter writer = new XMLWriter(
                new OutputStreamWriter(new FileOutputStream(new File("src//test1.xml")), "UTF-8"), format);
        // 写入
        writer.write(document);
        // 立即写入
        writer.flush();
        // 关闭操作
        writer.close();
    }

    /**
     * 遍历当前节点元素下面的所有(元素的)子节点
     *
     * @param node
     */
    public void listNodes(Element node) {
        System.out.println("当前节点的名称::" + node.getName());
        // 获取当前节点的所有属性节点
        List<Attribute> list = node.attributes();
        // 遍历属性节点
        for (Attribute attr : list) {
            System.out.println(attr.getText() + "-----" + attr.getName() + "---" + attr.getValue());
        }

        if (!(node.getTextTrim().equals(""))) {
            System.out.println("文本内容::::" + node.getText());
        }

        // 当前节点下面子节点迭代器
        Iterator<Element> it = node.elementIterator();
        // 遍历
        while (it.hasNext()) {
            // 获取某个子节点对象
            Element e = it.next();
            // 对子节点进行遍历
            listNodes(e);
        }
    }

    /**
     * @param node
     */
    public void elementMethod(Element node) {
        // 获取node节点中,子节点的元素名称为supercars的元素节点。
        Element e = node.element("supercars");
        // 获取supercars元素节点中,子节点为carname的元素节点(可以看到只能获取第一个carname元素节点)
        Element carname = e.element("carname");

        System.out.println(e.getName() + "----" + carname.getText());

        // 获取supercars这个元素节点 中,所有子节点名称为carname元素的节点 。

        List<Element> carnames = e.elements("carname");
        for (Element cname : carnames) {
            System.out.println(cname.getText());
        }

        // 获取supercars这个元素节点 所有元素的子节点。
        List<Element> elements = e.elements();

        for (Element el : elements) {
            System.out.println(el.getText());
        }
    }
}