如何在 Java 中找出损坏的 gz 文件

How to find out Corrupt gz file in Java

我必须解压缩我正在使用以下代码的 .gz 文件:

FileInputStream fis = null;
        FileOutputStream fos = null;
        GZIPInputStream gin = null;
        try {
            File file = new File(getPath(), zipName);
            fis = new FileInputStream(file);
            gin = new GZIPInputStream(fis);
            File newFile = // some initialization related to path and name
            fos = new FileOutputStream(getPath());
            byte[] buf = new byte[1024];
            int len;
            while ((len = gin.read(buf)) > 0) {
                fos.write(buf, 0, len);
            }
            gin.close();
            fos.close();

        //newFile is ready
        } catch(IOException e){
                // exception catch
        }

然而,当客户端 gz 文件损坏时,我收到以下错误:

  Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
    at java.util.zip.InflaterInputStream.fill(Unknown Source)
    at java.util.zip.InflaterInputStream.read(Unknown Source)
    at java.util.zip.GZIPInputStream.read(Unknown Source)
    at java.util.zip.InflaterInputStream.read(Unknown Source)

令人惊讶的是,该文件仍在解压缩并存储在本地位置。我根本不想解压缩或进一步处理损坏的文件。

一种方法是在 java.io.EOFException 命中 catch 子句时删除 newFile 对象,但这是正确的方法吗?当文件未损坏时,也可能存在其他一些可能的异常。

参考@EJP

如果您出于任何原因得到任何 IOException,从损坏的输入到飞入冥王星轨道的磁盘,您应该删除输出文件并将操作视为失败。你不必考虑更多。 – EJP