我遇到了java.util.zip一個奇怪的行爲檔案。*ZipFile中拋出錯誤,但ZipInputStream能夠解壓縮
我有一個zip文件,解壓後follwing tihngs發生
ZipFile zipfile = new ZipFile(file, ZipFile.OPEN_READ);
這是exaxt錯誤信息
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壓縮解決了我的問題。它正在爲Ian Roberts所建議的工作。
我已添加錯誤消息。 – C4CodeE4Exe
@ C4CodeE4Exe這是Java中部分本地zip實現的問題之一,它的錯誤消息並不是非常有用......我添加了一些更多的想法。 –
我嘗試使用org.apache.commons.compress.archivers.zip.ZipFile,它能夠給我看的條目,而不是errors.But有些者除外沒有GetName方法,項目已更名爲getEntries,getEntries和getEntry返回org.apache.commons.compress.archivers.zip.ZipArchiveEntry實例,close可以拋出IOException。 – C4CodeE4Exe