そこから抽出できる半壊れた 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 以外のライブラリを使用してコードを書き直しても問題ありません。最終的な目標は検証の信頼性です。