Java 为什么ZipFile(文件,ZipFile.OPEN_READ)不适用于GZip

Java 为什么ZipFile(文件,ZipFile.OPEN_READ)不适用于GZip,java,zip,gzip,Java,Zip,Gzip,我正在解压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 有没

我正在解压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的现有功能。如果我将ZipFile接口更改为ZipInputStream或GZipInputStream,那么我需要更改多个内容


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

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

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

和是两种完全不同的文件格式。看看
java.util.zip.GZIPOutputStream
java.util.zip.gzipoutstream

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

因为和是两种不同的格式,除了名称的一部分之外没有太多的共同点,它们都是关于压缩的。例如:gzip只做压缩,ZIP做压缩和多文件存储。所以我使用apache compress..正确使用它是一个好主意吗?我如何检查存档类型是ZIP还是gzip?您是根据文件扩展名(.ZIP、.tgz、.gzip,…)猜,还是根据文件内容猜(标题信息),另请参见:@C4CodeE4Exe:我刚刚看到,您不接受我的答案。为什么?如果是因为其他问题-只是,另一个问题…好的,我将此标记为答案,因为此答案说明我需要不同的实现。