我收到zip擴展名中的壓縮文件。 我無法使用Windows資源管理器直接打開它。 我可以使用7Zip提取它,它會拋出一些錯誤,但文件仍然按預期解壓縮。 我可以使用winrar解壓縮它,沒有錯誤,按預期解壓縮文件。嘗試使用java.util.zip/zip4j解壓縮時出現空文件夾
然後我試着用java.util.unzip/zip4j解壓縮。
java.util.zip代碼:
public static void unzip(String zipFilePath,
String destDirectory) throws IOException {
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
ZipInputStream zipIn =
new ZipInputStream(new FileInputStream(zipFilePath));
ZipEntry entry = zipIn.getNextEntry();
// iterates over entries in the zip file
while (entry != null) {
String filePath = destDirectory + File.separator + entry.getName();
if (!entry.isDirectory()) {
// if the entry is a file, extracts it
extractFile(zipIn, filePath);
} else {
// if the entry is a directory, make the directory
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
}
/**
* Extracts a zip entry (file entry)
* @param zipIn
* @param filePath
* @throws IOException
*/
private static void extractFile(ZipInputStream zipIn,
String filePath) throws IOException {
BufferedOutputStream bos =
new BufferedOutputStream(new FileOutputStream(filePath));
byte[] bytesIn = new byte[BUFFER_SIZE];
int read = 0;
while ((read = zipIn.read(bytesIn)) != -1) {
bos.write(bytesIn, 0, read);
}
bos.close();
}
與上面的代碼,沒有錯誤發生,但我得到一個空文件夾。
zip4j代碼:
String zipFilePath = "C:\\Juw\\JR\\file\\output\\020030214112016.zip";
//String zipFilePath = "C:\\Juw\\JR\\file\\output\\myFile.zip";
String destDirectory = "C:\\Juw\\JR\\file\\output\\targetUnzip";
try {
ZipFile zipFile = new ZipFile(zipFilePath);
zipFile.extractAll(destDirectory);
} catch (Exception ex) {
ex.printStackTrace();
}
而且有例外: net.lingala.zip4j.exception.ZipException:郵編找不到頭。可能不是一個zip文件
如果我試圖解壓縮使用winrar的文件,然後我使用壓縮功能內置的Windows壓縮它。我可以使用我的代碼成功解壓縮它。而我和客戶給我的大小也不一樣。我的是508kb,另一個是649kb。
問題是: - 有沒有任何Java庫,利用/作爲強大的winrar,可以提取壓縮文件沒有錯誤? - 解決此案例的最佳做法是什麼?
非常感謝提前:)
「什麼是最好的做法來解決這種情況?」 - 要求客戶提供有效的.zip文件。 – JimmyB
嗨JimmyB,你懷疑zip文件無效嗎?因爲winrar可以提取它沒有任何問題。客戶端有可能使用具有不同標準zip的第三方應用程序壓縮它?或從其他操作系統(而不是Windows)? – cumibulat
如果Windows和7zip以及Java lib失敗或報告錯誤,我認爲該文件在某些方面可能不完全有效。也許它甚至不是一個zip文件,而是一些其他格式寫入名爲.zip的文件。不依賴文件名來確定文件實際具有的文件的工具可能仍然能夠解壓縮它。 – JimmyB