java - 无法使用 Java 为 zip64 类型提取 zip 文件
问题描述
我正在使用以下函数在 Java 中提取 zip 文件
public static List<String> unzipFiles(File zipFile, File targetDirectory) {
List<String> files = new ArrayList<String>();
BufferedOutputStream dest = null;
FileInputStream fileInputStream = null;
ZipInputStream zipInputStream = null;
try {
fileInputStream = new FileInputStream(zipFile);
zipInputStream = new ZipInputStream(new BufferedInputStream(
fileInputStream));
ZipEntry zipEntry;
int count = 0;
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
log.debug("Extracting File Name :: " + zipEntry);
count++;
int length;
byte data[] = new byte[bufferGlb];
String fileName = zipEntry.getName();
File opFile = new File(targetDirectory, fileName);
FileOutputStream fileOutputStream = new FileOutputStream(opFile);
dest = new BufferedOutputStream(fileOutputStream, bufferGlb);
while ((length = zipInputStream.read(data, 0, bufferGlb)) != -1) {
dest.write(data, 0, length);
}
dest.flush();
files.add(fileName);
fileOutputStream.close();
}
log.debug("Total " + count + " Files Unziped Successfully ");
} catch (Exception e) {
log.error("Error occured in unzipping the file " + zipFile, e);
}
}
这对于普通的 zip 文件完全适用。但是对于使用 zip64 格式的某些 zip 文件,我得到以下异常:
java.util.zip.ZipException: invalid entry size (expected 0 but got 21504 bytes)
at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:384)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:196)
有人可以帮我解决如何提取 zip64 文件。
解决方案
推荐阅读
- bash - 测试特定文件集的问题
- react-native - OTSubscriber 未以模式呈现或先前隐藏
- ansible - VMware 来宾可以使用 ansible 来确定它自己的名称和/或 uuid 吗?
- python - 气流 - 无法导入自定义插件
- pentaho - Pentaho:图表中的对数刻度
- azure-devops - 从 Sql Server varbinary 字段向 Azure DevOps 添加附件
- javascript - Angular 7+ 找不到 Web Worker 脚本的 URL
- python - 熊猫:汇总并显示百分比差异
- google-sheets - 一个具有大量姓名和电子邮件的单独单元格如何在单独的行中相互对应?
- twilio - 为 Twilio-Whatsapp 电话号码上的传入消息设置 webhook