首页 > 解决方案 > 区分 *.zip 文件和压缩容器文件

问题描述

我有一个 InputStream 数据,它是文件的内容,但没有附加任何文件信息。我希望能够区分数据表示 *.zip 文件的情况,以及它是在封面下使用 zip 的容器文件格式(例如 *.docx、*.odt、*.jar)的情况。我不一定需要知道容器格式是什么,只需要知道流是否是“普通”zip(所以我知道将流拆分成单独的文件是否合适)。

这可能吗?我很高兴在解压之后或之前进行检测。

理想情况下,我尝试在 Java 中执行此操作,但如果有其他语言的代码示例,那么我很乐意在必要时将它们移植过来。

标签: javazipfile-format

解决方案


没有绝对可靠和正确的方法可以做到这一点,因为那些使用 ZIP 格式作为容器的格式往往是 100% 有效和正确的 ZIP 文件。

所以它们ZIP 文件。

但是,由于这些格式的数量不是无限的(并且只有一小部分在现实世界中很常见),因此您可能只需专门检测这些格式并将所有您不认识的内容视为“真正的”ZIP 文件。

这些格式中的大多数都需要在文件的早期字节中使用某种易于检查的标识符,因此如果您可以编写特定于规范的代码,那么它应该很容易。

file正确检测大多数这些格式,因此查看其来源应该为您提供足够的指示。

一些例子:

Apache Tika也很可能(尚未检查)已经完成了所有检测。


推荐阅读