Java 即使文件扩展名已更改,如何识别文件类型?
文件按文件扩展名分类。所以我的问题是,即使文件扩展名已更改,如何识别文件类型 例如,我有一个名为Java 即使文件扩展名已更改,如何识别文件类型?,java,filesystems,file-extension,magic-numbers,Java,Filesystems,File Extension,Magic Numbers,文件按文件扩展名分类。所以我的问题是,即使文件扩展名已更改,如何识别文件类型 例如,我有一个名为myVideo.mp4的视频文件,我已将其更改为myVideo.txt。因此,如果我双击它,首选的文本编辑器将打开该文件,而不会打开确切的内容。但是,如果我在视频播放器中播放myVideo.txt,视频将毫无问题地播放 我只是想开发一个应用程序来确定文件的类型,而不检查文件扩展名,也不建议使用打开文件的软件。我想用Java开发这个应用程序。有一个名为的工具,它可以做你想要做的事情-它目前支持5033种
myVideo.mp4
的视频文件,我已将其更改为myVideo.txt
。因此,如果我双击它,首选的文本编辑器将打开该文件,而不会打开确切的内容。但是,如果我在视频播放器中播放myVideo.txt
,视频将毫无问题地播放
我只是想开发一个应用程序来确定文件的类型,而不检查文件扩展名,也不建议使用打开文件的软件。我想用Java开发这个应用程序。有一个名为的工具,它可以做你想要做的事情-它目前支持5033种不同的文件类型-并且可以添加新的类型。在*nix系统上,还有一个类似的命令。嗯,这就像有一个文件格式的数据库,你不需要在应用程序中寻找扩展名就可以读取。就像Linux一样。所以,每当您打开一个文件时,您都需要检查它所属的文件格式数据库。虽然不确定它如何适用于不同的文件类型,但大多数文件都有固定的头格式,可以是zip、pdf、mpg、avi、png等。。因此,这种方法应该有效您可以尝试一下,但它已经很老了,尽管还不成熟。最好的方法仍然是文件扩展名
但是亚当的解决方案并不像你想象的那么糟糕。您可以使用围绕命令行调用的包装器构建独立于平台的解决方案。我认为使用此方法将获得更好的结果。以下代码片段检索有关文件类型的信息
final File file = new File("file.txt");
System.out.println("File type is: " + new MimetypesFileTypeMap().getContentType(file));
希望它能帮助您实现这一点的最佳库之一是。它不仅读取文件头,还能够执行内容分析以检测文件类型。使用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);
}
}
结构,幻数,元数据,字符串和正则表达式,启发式和统计分析。。。这个工具只能和它背后的规则数据库一样好 尝试DROID()来识别文件类型;Java,Net BSD许可。这是英国国家档案馆的免费项目,与Android无关。源代码可在Github和Sourceforge上获得很好
另请参见和谷歌“文件头”和“魔法数字”…TrID不是独立于平台的。我想以独立于平台的方式来做。TrID声称支持Linux,但我不能说我自己也尝试过。是的,这是真的。但我不能使用Windows中使用的相同应用程序在*nix中执行。这就是为什么我在考虑使用Java。这真的有效吗。Doc声明“这个类扩展了FileTypeMap,并通过文件扩展名提供文件的数据类型。”但是OP想要“识别文件类型,即使文件扩展名已经更改”+1 DROID实际上是一个非常令人印象深刻的库。我真不敢相信我竟然忘了。项目网站显示为不可用。我试图用纯java实现它。是的,Sourceforge页面是唯一可用的页面。