2

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

例如,我有一个名为 的视频文件myVideo.mp4,我已将其更改为myVideo.txt. 因此,如果我双击它,首选文本编辑器将打开文件,而不会打开确切的内容。但是,如果我myVideo.txt在视频播放器中播放,视频将毫无问题地播放。

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

4

6 回答 6

5

执行此操作的最佳库之一是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);
    }

}
于 2013-03-22T11:03:38.380 回答
4

结构、幻数、元数据、字符串和正则表达式、启发式和统计分析......该工具将与它背后的规则数据库一样好。

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

另请参见Darwinsys 文件libmagic

于 2013-03-22T11:09:33.017 回答
0

有一个名为TrID的工具可以满足您的需求 - 它目前支持 5033 种不同的文件类型 - 并且可以训练添加新类型。在 *nix 系统上,也有file类似的命令。

于 2013-03-22T03:50:11.930 回答
0

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

于 2013-03-22T07:50:34.760 回答
0

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

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

于 2013-03-22T08:20:09.867 回答
-3

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

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

希望它可以帮助你

于 2013-03-22T08:32:46.530 回答