文件类型检测(Document Type Detection)

优质
小牛编辑
122浏览
2023-12-01

MIME标准

多用途Internet邮件扩展(MIME)标准是用于标识文档类型的最佳可用标准。 这些标准的知识有助于浏览器在内部交互过程中。

每当浏览器遇到媒体文件时,它就会选择一个可用的兼容软件来显示其内容。 如果它没有任何合适的应用程序来运行特定的媒体文件,它建议用户为它获取合适的插件软件。

Tika中的类型检测

Tika支持MIME中提供的所有Internet媒体文档类型。 每当文件通过Tika传递时,它都会检测文件及其文档类型。 为了检测媒体类型,Tika内部使用以下机制。

文件扩展名

检查文件扩展名是检测文件格式的最简单且使用最广泛的方法。 许多应用程序和操作系统都为这些扩展提供支持。 下面显示的是一些已知文件类型的扩展。

文件名Extention
image.jpg
audio.mp3
java档案文件.jar
java类文件.class

Content-type Hints

无论何时从数据库检索文件或将其附加到其他文档,您都可能丢失文件的名称或扩展名。 在这种情况下,随文件提供的元数据用于检测文件扩展名。

魔术字节

观察文件的原始字节,可以为每个文件找到一些独特的字符模式。 某些文件具有称为magic bytes特殊字节前缀,这些字节前缀是专门制作的并包含在文件中以便识别文件类型

例如,您可以在PDF文件中找到CA FE BA BE(十六进制格式),在pdf文件中找到%PDF(ASCII格式)。 Tika使用此信息来识别文件的媒体类型。

字符编码

具有纯文本的文件使用不同类型的字符编码进行编码。 这里的主要挑战是识别文件中使用的字符编码的类型。 Tika遵循Bom markersByte Frequencies等字符编码技术来识别纯文本内容使用的编码系统。

XML根字符

为了检测XML文档,Tika解析xml文档并提取诸如根元素,命名空间和引用模式之类的信息,从中可以找到文件的真实媒体类型。

使用Facade类进行类型检测

facade类的detect()方法用于检测文档类型。 此方法接受文件作为输入。 下面显示的是使用Tika facade类进行文档类型检测的示例程序。

import java.io.File;
import org.apache.tika.Tika;
public class Typedetection {
   public static void main(String[] args) throws Exception {
      //assume example.mp3 is in your current directory
      File file = new File("example.mp3");//
      //Instantiating tika facade class 
      Tika tika = new Tika();
      //detecting the file type using detect method
      String filetype = tika.detect(file);
      System.out.println(filetype);
   }
}

将上面的代码保存为TypeDetection.java并使用以下命令从命令提示符运行它 -

javac TypeDetection.java
java TypeDetection 
audio/mpeg