代码:
/**
* 使用了ZipInputStream类来读取zip文件
* 可以逐个读取zip文件中的条目
* 而不需要将整个zip文件加载到内存中
* 这种方式更加高效,特别是在处理大文件时
* */
// 要进行解压缩的zip文件
File zipFile = new File("C:\\Users\\18323\\Downloads\\test_1709549502880.zip");
// 2.解析读取zip文件
ZipInputStream in = null;
try{
in = new ZipInputStream(new FileInputStream(zipFile), Charset.forName("gbk"));
// 遍历Zip文件中的每个子文件
ZipEntry zipEntry = null;
while ((zipEntry = in.getNextEntry()) != null) {
// 获取zip压缩包中的子文件名称
String zipEntryFileName = zipEntry.getName();
System.out.println("文件名:" + zipEntryFileName);
// 将ZipInputStream转换为ByteArrayInputStream
int len;
byte[] buf = new byte[1024];
ByteOutputStream out =null;
ByteArrayInputStream byteIs = null;
try {
out = new ByteOutputStream();
if ((len = in.read(buf)) != -1){
out.write(buf,0,len);
}
byteIs =new ByteArrayInputStream(out.toByteArray());
InputSource inr = new InputSource(byteIs);
inr.setEncoding("UTF-8");
// 使用SAXReader解析XML
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inr);
Element rootElement = document.getRootElement();
List<Element> elements = rootElement.elements();
for (Element element : elements) {
//去除文档中的内容
System.out.println(element.attributeValue("name"));
System.out.println(element.attributeValue("age"));
System.out.println(element.attributeValue("jjMaxLength"));
}
}catch (IOException e){
e.printStackTrace();
}finally {
out.close();
byteIs.close();
}
}
} catch (IOException | DocumentException e) {
e.printStackTrace();
}finally {
if (in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}