我有zip file(從ownCloud實例下載),無法使用Java庫進行解壓縮(Java版本「1.8.0_66」)來自java.util.zip。如果我嘗試這樣做,下面的異常被拋出:在Java中解壓導致「java.util.zip.ZipException」的zip文件 - 無效的LOC頭(壞簽名)
java.util.zip.ZipException: invalid LOC header (bad signature)
發佈一個Linux的「文件」命令,它輸出以下內容:
so-example.zip: Zip archive data, at least v3.0 to extract
一些試驗和錯誤後我發現,那些應該是「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庫或任何其他方法這些文件?