在Java中确定文件类型

本文详细介绍了在Java中确定文件类型的各种方法,包括Java自带的Files.probeContentType、MimetypesFileTypeMap.getContentType、URLConnection.getContentType及其相关方法,以及第三方库Apache Tika的使用。文章指出,大部分方法依赖于文件扩展名,而Tika在识别非标准扩展名时表现更佳。
摘要由CSDN通过智能技术生成

以编程方式确定文件的类型可能非常棘手,并且已经提出并实现了许多基于内容的文件标识方法。 Java中有几种可用于检测文件类型的实现,其中大多数很大程度上或完全基于文件的扩展名。 这篇文章介绍了Java中最常见的文件类型检测实现。

本文介绍了几种在Java中识别文件类型的方法。 简要描述每种方法,并用代码清单进行说明,然后将其与输出相关联,该输出演示如何根据扩展名键入不同的公用文件。 某些方法是可配置的,但是除非另有说明,否则此处显示的所有示例均使用开箱即用提供的“默认”映射。

关于示例

这篇文章中显示的屏幕快照是针对某些主题文件运行的每个列出的代码片段,这些主题文件是为了测试Java中文件类型检测的不同实现而创建的。 在介绍这些方法并演示每种方法检测到的类型之前,我将列出要测试的文件,它们的名称以及它们的真实名称。

文件
名称
文件
延期
文件
类型
类型匹配
延期公约?
ActualXml.xml XML文件 XML格式
博客文章PDF PDF格式 没有
blogPost.pdf pdf格式 PDF格式
blogPost.gif gif GIF
blogPost.jpg jpg JPEG格式
blogPost.png png PNG
blogPostPDF.txt 文本文件 PDF格式 没有
blogPostPDF.xml XML文件 PDF格式 没有
blogPostPNG.gif gif PNG 没有
blogPostPNG.jpg jpg PNG 没有
ustin.txt 文本文件 文本
ustin.xml XML文件 文本 没有
尘土 文本 没有

Files.probeContentType(Path)[JDK 7]

Java SE 7引入了高度实用的Files类该类的Javadoc简洁地描述了它的用法:“该类专门由对文件,目录或其他类型的文件进行操作的静态方法组成”,以及“在大多数情况下,此处定义的方法”将委派给关联的文件系统提供者以执行文件操作。”

java.nio.file.Files类提供了方法probeContentType(Path),该方法通过使用“已安装的FileTypeDetector实现”来“探测文件的内容类型”(Javadoc还指出,“ Java虚拟机的给定调用”维护系统范围的文件类型检测器列表”)。

/**
 * Identify file type of file with provided path and name
 * using JDK 7's Files.probeContentType(Path).
 *
 * @param fileName Name of file whose type is desired.
 * @return String representing identified type of file with provided name.
 */
public String identifyFileTypeUsingFilesProbeContentType(final String fileName)
{
   String fileType = "Undetermined";
   final File file = new File(fileName);
   try
   {
      fileType = Files.probeContentType(file.toPath());
   }
   catch (IOException ioException)
   {
      out.println(
           "ERROR: Unable to determine file type for " + fileName
              + " due to exception " + ioException);
   }
   return fileType;
}

对先前定义的文件集执行以上基于Files.probeContentType(Path)的方法时,输出将显示,如下一个屏幕快照所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值