说明:
生成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;
}
}