gpt4 book ai didi

java - 在 Java 中解压 zip 文件会导致 "java.util.zip.ZipException"- 无效的 LOC header (错误签名)

转载 作者:行者123 更新时间:2023-11-30 07:49:26 24 4
gpt4 key购买 nike

我有一个zip file (从 ownCloud 实例下载)并且无法使用 java.util.zip 中的 Java 库(java 版本“1.8.0_66”)解压。如果我尝试这样做,则会引发以下异常:

java.util.zip.ZipException:无效的 LOC header (错误签名)

当发出 Linux 'file' 命令时,它输出以下内容:

so-example.zip:Zip存档数据,至少v3.0才能提取

经过一番尝试和错误后,我发现那些本应由“v2.0”解压缩的文件可以由 Java 处理,没有任何问题。

用于解包的代码的最小示例如下:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class PlaygroundZip{
public static void main(String[] args) {
String filename = "/tmp/so-example.zip";
byte[] buffer = new byte[1024];

try {
ZipFile zipFile = new ZipFile(filename);
Enumeration entries = zipFile.entries();
while(entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry)entries.nextElement();
String currName = entry.getName();

System.out.println("File: " + currName);

if(entry.isDirectory()) {
new File(currName).mkdirs();
} else{
InputStream zis = zipFile.getInputStream(entry);
FileOutputStream fos = new FileOutputStream(currName);

int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
}
}
zipFile.close();
} catch (IOException ioe) {
System.err.println("Unhandled exception:");
ioe.printStackTrace();
}

}
}

如何使用标准 Java 库或任何其他方法处理这些文件?

最佳答案

到目前为止,我发现解压这些文件的唯一方法是使用系统命令并使用“unzip”命令行工具(Ubuntu 12.04 LTS、UnZip 6.00)。由于这是在服务器应用程序中使用的,因此它是一种可以接受的黑客攻击,尽管远非优雅。

Process p = Runtime.getRuntime().exec("unzip " + filename + " -d /tmp/mydir");

关于java - 在 Java 中解压 zip 文件会导致 "java.util.zip.ZipException"- 无效的 LOC header (错误签名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33480085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com