估计文件是否为MIME类型

时间:2013-03-01 10:06:48

标签: java mime-types

此方法应检查文件是否为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类型吗?

3 个答案:

答案 0 :(得分:4)

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

  1. 通过文件magic number进行识别 - 这是一种可靠的方法,但需要从文件中读取信息
  2. 通过文件扩展名来猜测 - 这是一种快速的方法,但可能不太准确
  3. 以下解决方案使用第一种方法:

    1. Apache Tika - 使用现有解析器库从各种文档中检测和提取元数据和结构化文本内容的工具包
    2. JMimeMagic - 用于确定文件或流的MIME类型的Java库
    3. mime-util - 使Java程序能够根据文件扩展名,魔法数据和内容嗅探来检测MIME类型
    4. 以下解决方案使用第二种方法:

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

        有关更多信息,请参阅此post

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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