/**
* 解读zip文件
*
* @param zipFile 压缩文件
* @param suffixType 文件后缀(非空时只处理固定后缀的文件)
* @return 处理结果
* @throws IOException
*/
public static List<InputStream> readZip(File zipFile, String suffixType) throws IOException {
List<InputStream> list = new ArrayList<>();
//判断文件是否存在
if (!zipFile.exists()) {
System.out.println("无效的zip文件");
}
//获取文件流
InputStream inputStream = FileUtil.getInputStream(zipFile);
//转化文件流为压缩文件流
ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("gbk"));
ZipEntry zipEntry;
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
//如果文件后缀条件不为空且后缀条件不符则跳过文件读取
if (StrUtil.isNotBlank(suffixType) && !zipEntry.getName().endsWith(suffixType)) {
continue;
}
//文件读取处理
byte[] buffer = new byte[1024];
int len;
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
while ((len = zipInputStream.read(buffer)) != -1) {
byteStream.write(buffer, 0, len);
}
// 关闭流
byteStream.close();
//读取的文件转为所需的流添加到集合中
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteStream.toByteArray());
list.add(byteArrayInputStream);
}
return list;
}
public static void main(String[] args) throws IOException, IllegalAccessException, InstantiationException {
List<InputStream> inputStreams = readZip(new File("E:\\test\\rev\\ACCINT_RESULT.DAT.zip"), ".DAT");
//将获取到的文件字节流写入到本地磁盘中
InputStream inputStream = inputStreams.get(0);
// 创建输出流
FileOutputStream outputStream = new FileOutputStream("E:\\test\\rev\\target.txt");
// 读取源文件内容并写入目标文件
int data;
while ((data = inputStream.read()) != -1) {
outputStream.write(data);
}
//写入成功后,可手动查看其中内容,是否与压缩包内的一致
}