2012-11-30 33 views
3

我正在解壓Zip文件。由於有兩種類型的檔案 - Zip和GZip。爲什麼ZipFile(文件,ZipFile.OPEN_READ)不適用於GZip

我使用以下

ZipFile zipFile = new ZipFile(file, ZipFile.OPEN_READ); 

但它給下面的錯誤gzip的存檔類型

java.util.zip.ZipException: error in opening zip file 
at java.util.zip.ZipFile.open(Native Method) 

此代碼工作正常的Zip壓縮包類型的檔案,不適合使用gzip

有沒有辦法使用上面的代碼,因爲我現有的功能使用ZipFile跨各種functions.If我ZipFile接口更改爲ZipInputStream或GZipInput流,然後我需要改變多個東西。

編輯:如果傳入檔案館型zip和gzip的,我需要不同的實現按@Joachim紹爾的評論

+4

因爲[ZIP](https://en.wikipedia.org/wiki/ZIP_(file_format))和​​[gzip的](https://en.wikipedia.org/wiki/Gzip)是兩種不同的格式,除了部分名稱之外沒有太多共同之處,並且它們都有點關於壓縮。例如:gzip * only *壓縮,ZIP壓縮*和*多文件存儲。 –

回答

3

由於@Joachim_Sauer已經說過,他們是蘋果和李子。

看看Apache的compress,它可以處理(和更多)壓縮/歸檔類型。然而,你需要做不同的實現,你必須自己決定使用哪個實現(不管你是處理zip還是gzip文件)。

+0

所以我使用的是Apache壓縮..它是一個好主意,正確使用它 – C4CodeE4Exe

+0

任何想法如何檢查壓縮文件類型無論是Zip還是GZip – C4CodeE4Exe

+0

根據文件擴展名(.zip,.tgz, .gzip,...),或者您嘗試基於文件內容(標頭信息)進行猜測,另請參閱:http://stackoverflow.com/questions/12560824/how-to-know-the-filetype-in -java-android – Andy

3

Zipgzip是兩種完全不同的文件格式。看一看java.util.zip.GZIPOutputStreamjava.util.zip.GZIPInputStream

InputStream in = new BufferedInputStream(
    new GZIPInputStream(new FileInputStream(file)) 
); 
相關問題