我在使用 java.util.zip.* 时遇到了一个奇怪的问题。
我有一个zip文件,当进行解压缩时,出现以下情况:
但是如果我使用以下代码,就能够打开归档文件而不出现任何错误。
请注意,文件使用WinZIP进行压缩。
我的问题是,既然ZipFile和ZipInputStream几乎是一样的,为什么ZipFile会抛出异常,无法进行解压缩。
编辑:问题在于,如果我使用WinZip工具压缩文件,然后使用列出的程序解压缩,它能正常工作。但是,这个问题特别针对来自外部来源的存档(外部来源声称他们正在使用WinZip)。此外,如果我使用WinZip工具打开完全相同的存档(外部存档),它会显示并解压缩文件。但这个JAVA特定代码(ZipFile)根本不起作用。
编辑:我无法弄清楚为什么Java本机代码不能处理我的ZIP存档,但是apache compress解决了我的问题。如Ian Roberts所建议的那样,它适合我。
我有一个zip文件,当进行解压缩时,出现以下情况:
ZipFile zipfile = new ZipFile(file, ZipFile.OPEN_READ);
这是确切的错误信息
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:127)
at java.util.zip.ZipFile.<init>(ZipFile.java:143)
at com.basware.ExtractZip.unpack(ExtractZip.java:27)
at com.basware.ExtractZip.main(ExtractZip.java:17)
但是如果我使用以下代码,就能够打开归档文件而不出现任何错误。
try {
BufferedOutputStream dest = null;
File file = new File("File_Path");
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
// write the files to the disk
FileOutputStream fos = new
FileOutputStream(entry.getName());
dest = new
BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER))
!= -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
}
zis.close();
请注意,文件使用WinZIP进行压缩。
我的问题是,既然ZipFile和ZipInputStream几乎是一样的,为什么ZipFile会抛出异常,无法进行解压缩。
编辑:问题在于,如果我使用WinZip工具压缩文件,然后使用列出的程序解压缩,它能正常工作。但是,这个问题特别针对来自外部来源的存档(外部来源声称他们正在使用WinZip)。此外,如果我使用WinZip工具打开完全相同的存档(外部存档),它会显示并解压缩文件。但这个JAVA特定代码(ZipFile)根本不起作用。
编辑:我无法弄清楚为什么Java本机代码不能处理我的ZIP存档,但是apache compress解决了我的问题。如Ian Roberts所建议的那样,它适合我。