2012-11-30 35 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)) 
); 
相关问题