【问题标题】:Is it possible to find out if a file is a zip file?是否可以确定文件是否为 zip 文件?
【发布时间】:2013-06-17 23:19:33
【问题描述】:

我有一个没有扩展名的文件。但我需要确定该文件是否是使用 java 的 zip 文件。有什么方法可以查出该文件是否为 zip 格式?

【问题讨论】:

    标签: java


    【解决方案1】:

    有:尝试在上面打开一个ZipFile;如果不是 ZIP,你会得到一个ZipException

    使用 JDK 7,更容易:

    Files.probeContentType(Paths.get("/path/to/file"))
    

    如果文件是 zip 文件,它将返回“application/zip”!

    奖励:使用 Java 7,您可以以 FileSystem 的形式访问 zip 文件(或 jar 文件,因为 jar 是 zip 文件)、在其中导航、修改文件等。不再有这些讨厌的 ZipEntry/JarEntry对象了。

    抛弃File。快。

    【讨论】:

    • 感谢您的回答,但目前我正在使用 JDK 1.6,因此无法检查。我尝试使用 ZipInputStream 但我没有收到任何异常
    • 那么请尝试第一个解决方案
    • 我也尝试了代码 File f = new File("/Users/jojo_john/Downloads/123"); System.out.println("类型:"+new MimetypesFileTypeMap().getContentType(f));但即使 123 是一个 zip 文件,我也会得到类似 Type:application/octet-stream 的输出
    • 其实调用probeContentType()的结果并不总是application/zip,有时也可以是application/x-zip-compressed
    • 此解决方案还有另一个问题。我在具有非明显扩展名的 ZIP 文件上使用它,它返回 null。 (Linux,openjdk-15)到目前为止,检查文件签名对我来说是最好的。就像这里stackoverflow.com/q/33934178
    【解决方案2】:

    使用ZipInputStream打开它并检查它是否抛出ZipException

    编辑:ZipException 是正确的例外

    【讨论】:

    • 我尝试使用 ZipInputStream 打开一个 zip 文件,但没有出现异常
    • @JojoJohn - 那么你得到了什么?
    • 输入流文件; theFile = new FileInputStream("/Users/jojo_john/Downloads/test.pdf"); ZipInputStream 流 = 新 ZipInputStream(theFile);我已经尝试了上面的代码,但没有收到任何 ZipException。请检查以上示例是否有误
    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2021-01-31
    • 2010-10-30
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多