文件按文件扩展名分类。所以我的问题是,即使文件扩展名已更改,如何识别文件类型。
例如,我有一个名为 的视频文件myVideo.mp4
,我已将其更改为myVideo.txt
. 因此,如果我双击它,首选文本编辑器将打开文件,而不会打开确切的内容。但是,如果我myVideo.txt
在视频播放器中播放,视频将毫无问题地播放。
我只是想开发一个应用程序来确定文件的类型,而不检查文件扩展名并建议打开文件的软件。我想用Java开发应用程序。
文件按文件扩展名分类。所以我的问题是,即使文件扩展名已更改,如何识别文件类型。
例如,我有一个名为 的视频文件myVideo.mp4
,我已将其更改为myVideo.txt
. 因此,如果我双击它,首选文本编辑器将打开文件,而不会打开确切的内容。但是,如果我myVideo.txt
在视频播放器中播放,视频将毫无问题地播放。
我只是想开发一个应用程序来确定文件的类型,而不检查文件扩展名并建议打开文件的软件。我想用Java开发应用程序。
执行此操作的最佳库之一是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);
}
}
结构、幻数、元数据、字符串和正则表达式、启发式和统计分析......该工具将与它背后的规则数据库一样好。
尝试使用 DROID(数字记录对象识别工具)来识别文件类型;Java,Net BSD 许可。它是英国国家档案馆的一个免费项目,与 Android 无关。源代码在 Github 和 Sourceforge 上可用。DROID 文档很好。
另请参见Darwinsys 文件和libmagic。
好吧,这就像拥有一个您想要阅读的文件格式数据库,而无需在您的应用程序中查找扩展名。就像 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));
希望它可以帮助你