8

此方法应检查文件是否为 MIME 类型。为了实现这个目标,我使用了 probeContentType()方法。
然而,也许是决定相同问题的另一种方式。还有哪些其他选择(如果有的话)?

代码:

class ProbeContentTypeCheker implements Checker {

    @Override
    public boolean check(File fileCheck) {
        try {
            Path filePath = FileSystems.getDefault().getPath(
                    fileCheck.getAbsolutePath());
            if ((Files.probeContentType(filePath) != null)) {
                return true;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return false;
    }
}

问题:

  • 还有其他方法可以检查文件中的 MIME 类型吗?
4

3 回答 3

6

有两种获取文件 mime 类型的方法:

  1. 通过文件的幻数识别- 这是一种可靠的方法,但它需要从文件中读取信息
  2. 通过文件扩展名猜测 - 这是一种快速的方法,但可能不太准确

以下解决方案使用第一种方法:

  1. Apache Tika - 一个使用现有解析器库从各种文档中检测和提取元数据和结构化文本内容的工具包
  2. JMimeMagic - 用于确定文件或流的 MIME 类型的 Java 库
  3. mime-util - 使 Java 程序能够根据文件扩展名、魔术数据和内容嗅探检测 MIME 类型

以下解决方案使用第二种方法:

  1. javax.activation.MimetypesFileTypeMap - JavaBeans 激活框架的这一部分。MimetypesFileTypeMap 在用户系统的不同位置查找 MIME 类型文件条目。
  2. 使用 java.net.URL - 扩展名和 mime 类型之间的映射在文件 [jre_home]/lib/content-types.properties 中定义

有关更多信息,请参阅此帖子

于 2013-03-09T09:27:00.183 回答
1

您可以使用String mimeType = new MimetypesFileTypeMap().getContentType(theFile);.

请注意,如果未找到 MIME 类型,application/octet-stream则返回而不是null.

于 2013-03-01T10:31:36.080 回答
0

如果您不能使用 Java 7,另一种选择是使用URLConnection.guessContentTypeFromName(String fileName)。请注意,如果无法猜测内容类型,则该方法将返回null.

于 2013-03-08T11:00:05.617 回答