2012-05-11 33 views
2

我們如何檢查是否zip文件損壞或有效的Zip文件將其解壓縮ZipInputStream檢查是否zip文件有效,纔去提取它

我code`

import java.io.IOException; 
import java.io.OutputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 

public void unzip() { 
     FileInputStream fin = null; 
     ZipInputStream zin = null; 
     OutputStream fout = null; 

    File outputDir = new File(_location); 
    File tmp = null; 

    try { 
     fin = new FileInputStream(_zipFile); 
     zin = new ZipInputStream(fin); 
     ZipEntry ze = null; 
     while ((ze = zin.getNextEntry()) != null) { 
      Log.d("Decompress", "Unzipping " + ze.getName()); 

      if (ze.isDirectory()) { 
       dirChecker(ze.getName()); 
      } else { 
       tmp = File.createTempFile("decomp", ".tmp", outputDir); 
       fout = new BufferedOutputStream(new FileOutputStream(tmp)); 
       DownloadFile.copyStream(zin, fout, _buffer, BUFFER_SIZE); 
       zin.closeEntry(); 
       fout.close(); 
       fout = null; 
       tmp.renameTo(new File(_location + ze.getName())); 
       tmp = null; 
      } 
     } 
     zin.close(); 
     zin = null; 
    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } finally { 
     if (tmp != null ) { try { tmp.delete();  } catch (Exception ignore) {;} } 
     if (fout != null) { try { fout.close();  } catch (Exception ignore) {;} } 
     if (zin != null ) { try { zin.closeEntry(); } catch (Exception ignore) {;} } 
     if (fin != null ) { try { fin.close();  } catch (Exception ignore) {;} } 
    } 
} 

`

此之前,工作正常與有效的zipfile,但無效的zipfile它doesen't拋出任何異常不產生任何東西,但我需要在解壓縮之前確認zip文件的有效性

回答

1

我認爲檢查zip文件是否因爲兩個原因而被破壞幾乎沒用:

  1. 某些zip文件包含的字節數不僅僅是zip部分。例如,自解壓檔案具有可執行部分,但它們仍然是有效的zip。
  2. 該文件可能會損壞而不更改其大小。

因此,我建議計算檢查腐敗的保證方法的CRC。

1

只要Zip文件的zip目錄目錄存在,zip文件就會有效。如果您使用zip命令,只要目錄存在,就可以瀏覽它。用於測試的參數實際上執行提取和CRC校驗。

您可以做的是使用Java的臨時目錄創建工具提取並對臨時文件夾執行CRC檢查。然後如果全部成功,則通過將文件從臨時目錄複製到最終目的地來提交解壓縮文件。