0

そこから抽出できる半壊れた zip アーカイブがありますが、半壊れたファイルが得られます。

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>

注意: アーカイブの内容は単一のテキスト ファイルです (事前に同意済み)。

Q.このような場合に無効と見なされるように、zip ファイルを厳密に検証するにはどうすればよいですか?

PS apache-commons-compress 以外のライブラリを使用してコードを書き直しても問題ありません。最終的な目標は検証の信頼性です。

4

0 に答える 0