估计文件是否为MIME类型

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

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

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

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

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

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

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

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

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

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

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