0

有一个半损坏的 zip-archive 可以从中提取,但会提供一个半损坏的文件。

Ubuntu Archive Manager 从存档中提取,但给出警告:

在此处输入图像描述

以下 Java 代码完全没有错误:

 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipFile;

 import org.apache.commons.io.IOUtils;

 ...

 public static boolean isValidZipFile(final File file) {
        if (file.length() == 0) return false;

        try (ZipFile zipFile = new ZipFile(file)) {
            final Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();

            while (entries.hasMoreElements()) {
                ZipArchiveEntry entry = entries.nextElement();

                if (entry.getName().endsWith(".txt")) {
                    final InputStream is = zipFile.getInputStream(entry);

                    byte[] bytes = IOUtils.toByteArray(is);

                    return true;
                }
            }
        } catch (IOException e) {
            return false;
        }

        return false;
    }

依赖项:

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.7</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.20</version>
    </dependency>

NB档案的内容是一个单一的文本文件(这是事先同意的)。

Q.如何严格验证 zip 文件,使其在这种情况下被视为无效?

PS可以使用 apache-commons-compress 以外的其他库重写代码。最终目标是验证可靠性。

4

0 回答 0