即使文件扩展名已更改,如何识别文件类型?

文件按文件扩展名分类。 所以我的问题是,即使文件扩展名已被更改,如何识别文件类型。

例如,我有一个名为myVideo.mp4的video文件,我已将其更改为myVideo.txt 。 因此,如果我双击它,首选文本编辑器将打开该文件,并且不会打开确切的内容。 但是,如果我在video播放器中播放myVideo.txt ,video将播放没有任何问题。

我只是想开发一个应用程序来确定文件的类型,而不检查文件扩展名并建议打开文件的软件。 我想用Java开发应用程序。

结构,幻数,元数据,字符串和正则表达式,启发式和统计分析……该工具只能与其背后的规则数据库一样好。

尝试DROID( 数字记录对象标识工具 )来识别文件类型; Java,Net BSD许可。 这是英国国家档案馆的一个免费项目,与Android无关。 来源可在Github和Sourceforge上获得。 DROID文档很好。

另见Darwinsys文件libmagic

Apache Tika是最好的图书馆之一。 它不仅可以读取文件的标题,还可以执行内容分析来检测文件类型。 使用Tika非常简单,这是检测文件类型的示例:

 import java.net.URL; import org.apache.tika.Tika; //Including Tika public class TestTika { public static void main(String[] args) { Tika tika = new Tika(); String fileType = tika.detect(new URL("http://example.com/someFile.jpg")); System.out.println(fileType); } } 

有一个名为TrID的工具可以完成您的工作 – 它当前支持5033种不同的文件类型 – 并且可以训练添加新类型。 在* nix系统上,还有file命令,它执行类似的操作。

好吧,它就像你想要阅读的文件格式数据库,而不需要在你的应用程序中查找扩展名。 正如Linux所做的那样。 因此,无论何时打开文件,都需要检查文件格式数据库所属的类型。 虽然不确定它如何适用于不同的文件类型,但大多数文件都有固定的标题格式,无论是zip,pdf,mpg,avi,png等等。所以这种方法应该有效

你可以尝试MimeUtil2 ,但它已经很老了,虽然不是up2date。 最好的方法仍然是文件扩展名。

但亚当的解决方案并不像你想象的那么糟糕。 您可以使用命令行调用的包装器构建独立于平台的解决方案。 我想你会用这种方法得到更好的结果。

以下代码段检索有关文件类型的信息

 final File file = new File("file.txt"); System.out.println("File type is: " + new MimetypesFileTypeMap().getContentType(file)); 

希望它可以帮到你