我正在開發一個下載zip文件並在本地解壓縮的項目。我遇到的問題是解壓縮過程的工作時間爲5%。Android:解壓縮文件引發數據錯誤或CRC錯誤
在這一點上,對我來說這是一個謎,因爲它有時會起作用,但大多數情況下它會拋出數據或crc錯誤。即使zip文件沒有改變,它甚至會在erros之間切換。
我試過由許多工具創建的zip文件,如果格式不正確。但無濟於事。即使在終端中創建的拉鍊也不起作用。
這裏是我的解壓碼:
try {
String _location = model.getLocalPath();
FileInputStream fin = new FileInputStream(localFile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
byte[] buffer = new byte[1024];
while((ze = zin.getNextEntry()) != null) {
if(_cancel) break;
System.out.println("unzipping " + ze.getName());
if(ze.isDirectory()) {
File f = new File(_location + ze.getName());
f.mkdirs();
} else {
FileOutputStream fout = new FileOutputStream(_location + ze.getName());
for(int c = zin.read(buffer); c > 0; c = zin.read(buffer)) {
fout.write(buffer,0,c);
}
zin.closeEntry();
fout.close();
}
}
zin.close();
if(_cancel) {
handler.post(dispatchCancel);
return;
}
} catch(Exception e) {
System.out.println("UNZIP ERROR!");
System.out.println(e.getMessage());
System.out.println(e.toString());
e.printStackTrace();
}
這裏是如何我通常會創建的zip文件。
$>zip -r myzip.zip myzip/
這裏有兩個錯誤輸出:
java.util.zip.ZipException: CRC mismatch
at java.util.zip.ZipInputStream.readAndVerifyDataDescriptor(ZipInputStream.java:209)
at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:173)
at com.XX.XX.XXIssueDownloader$7.run(XXIssueDownloader.java:222)
at java.lang.Thread.run(Thread.java:1020)
java.util.zip.ZipException: data error
at java.util.zip.ZipInputStream.read(ZipInputStream.java:336)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at com.XX.XX.XXIssueDownloader$7.run(XXIssueDownloader.java:219)
at java.lang.Thread.run(Thread.java:1020)
任何人有任何想法,爲什麼我可能會得到這些錯誤?這些都沒有得到。
大,我得到'CRC error',只是因爲下載的zip文件損壞。我在代碼中使用'f.write(buffer,0,len1);'而不是'f.write(buffer)',然後解決了這個問題。謝謝。 – wodong
當我嘗試在我的Android設備上解壓apk文件時,我收到了crcError錯誤。 我猜你們大家正在談論的代碼是用於PC上的Eclipse(或類似的)。如果我想將我的Android設備(Samsung Galaxy Note 2與Android 4.1.2)解壓縮,我該如何避免此錯誤? 謝謝! :) –
@wodong - 我已經在使用f.write(buffer,0,len1);在我回答的代碼示例中 – gngrwzrd