【问题标题】:why ZipFile(file, ZipFile.OPEN_READ) does not work for GZip为什么 ZipFile(file, ZipFile.OPEN_READ) 不适用于 GZip
【发布时间】:2012-11-18 15:12:32
【问题描述】:

我正在解压缩 Zip 档案。因为有两种类型的档案 - Zip 和 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 接口更改为 ZipInputStream 或 GZipInputStream,那么我需要更改多项内容。

编辑:如果传入的档案是 Zip 和 GZip 类型,我是否需要根据 @Joachim Sauer 的评论进行不同的实现

【问题讨论】:

  • 因为ZIPgzip 是两种不同的格式,除了名称的一部分之外没有太多共同点,而且它们都与压缩有关。例如:gzip only 做压缩,ZIP 做压缩 and multi-file-storage。

标签: java zip gzip


【解决方案1】:

Zipgzip 是两种完全不同的文件格式。看看java.util.zip.GZIPOutputStreamjava.util.zip.GZIPInputStream

InputStream in = new BufferedInputStream(
    new GZIPInputStream( new FileInputStream( file) )
);

【讨论】:

    【解决方案2】:

    正如@Joachim_Sauer 已经说过的,它们是苹果和李子。

    看看 apache 的 compress,它可以同时处理(以及更多)压缩/归档类型。但是,您需要执行不同的实现,并且您必须自己确定要使用的实现(无论您处理 zip 文件还是 gzip 文件)。

    【讨论】:

    • 所以我正在使用 apache compress .. 正确使用它是个好主意
    • 知道如何检查存档类型是 Zip 还是 GZip
    • 要么根据文件扩展名(.zip、.tgz、.gzip、...)进行猜测,要么根据文件内容(标题信息)进行猜测,另请参阅:stackoverflow.com/questions/12560824/…
    • @C4CodeE4Exe:我刚刚看到,你不接受我的回答。为什么?如果是因为额外的问题 - 就是这样,另一个问题......
    • 好的,我将其标记为答案,因为该答案表明我需要不同的实现。
    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多