DOM生成xml文件,并压缩成zip

说明:

生成xml文件、并压缩成zip、在转成byte数组

效果:

zip文件
在这里插入图片描述

xml效果

<?xml version="1.0" encoding="UTF-8"?>
<People>
    <Teacher>
	  <teacherName>老师姓名</teacherName>
	</Teacher>
	<Students>
		<student>
			<studentName>张三</studentName>
			<studentAge>18</studentAge>
		</student>
		<student>
			<studentName>李四</studentName>
			<studentAge>25</studentAge>
		</student>
	</Students>
</People>

DOM生成XML文件并压缩成Zip

package sqy;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.time.Instant;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author suqinyi
 * @Date 2021/7/1
 */

public class XmlCreateTest {

    
    /**
     * 生成xml
     */
    @Test
    public void test02() throws Exception {
        DataOutputStream dataOs = null;

         // 第一步:创建DOM树
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db;
        db = dbf.newDocumentBuilder();
        Document document = db.newDocument();
        document.setXmlStandalone(true);

        // 第二步:完善树结构
        // 创建节点
        // 最外层的节点
        Element People = document.createElement("People");
        // 节点
        Element Teacher = document.createElement("Teacher");
        // 节点
        Element teacherName = document.createElement("teacherName");

        // 节点设值
        teacherName.setTextContent("老师姓名");
        Teacher.appendChild(teacherName);

        int count=2;
        Element Students = document.createElement("Students");
        for (int i = 1; i <= count; i++) {
            Element student = document.createElement("student");
            Element studentName = document.createElement("studentName");
            Element studentAge = document.createElement("studentAge");
            if (i==1){
                studentName.setTextContent("张三");
                studentAge.setTextContent("18");
            }else {
                studentName.setTextContent("李四");
                studentAge.setTextContent("25");
            }
            student.appendChild(studentName);
            student.appendChild(studentAge);
            Students.appendChild(student);
        }


        // 将子节点添加到父节点
        document.appendChild(People);
        People.appendChild(Teacher);
        People.appendChild(Students);

        /**
         * 生成XMl String
         */
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer t = tf.newTransformer();
        t.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//指定编码级别
        t.setOutputProperty(OutputKeys.INDENT, "yes");
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        t.transform(new DOMSource(document), new StreamResult(bos));
        System.out.println("生成的xml内容:"+"\n"+bos);


        /**
         * 对生成的String进行压缩
         */
        // 声明ZipOutputStream,用来输出zip文件。
        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream("sqy_test.zip"));
        // 声明ZipEntry
        ZipEntry entry = new ZipEntry("sqy—test.xml");
        // 将entry加入到zipOut中。
        zipOut.putNextEntry(entry);
        zipOut.write(bos.toByteArray());
        // 利用DataOutputStream对ZipOutputStream进行包装。
        dataOs = new DataOutputStream(zipOut);
        dataOs.close();


        /**
         * ZIP压缩包转换为可传输的byte[]流
         */
        byte[] fileByte = this.fileToByte("sqy_test.zip");
        System.out.println("zip的字节流:"+ Arrays.toString(fileByte));
    }

    /**
     * <p>
     * 文件转换为二进制数组
     * @param filePath 文件路径
     */
    public static byte[] fileToByte(String filePath) throws Exception {
        byte[] data = new byte[0];
        File file = new File(filePath);
        if (file.exists()) {
            FileInputStream in = new FileInputStream(file);
            ByteArrayOutputStream out = new ByteArrayOutputStream(2048);
            byte[] cache = new byte[1024];
            int nRead = 0;
            while ((nRead = in.read(cache)) != -1) {
                out.write(cache, 0, nRead);
                out.flush();
            }
            out.close();
            in.close();
            data = out.toByteArray();
        }
        return data;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suqinyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值