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

时间:2013-03-22 03:09:59

标签: java filesystems file-extension

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

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

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

6 个答案:

答案 0 :(得分: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);
    }

}

答案 1 :(得分:3)

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

尝试DROID( Digital Record Object IDentification tool )来识别文件类型; Java,Net BSD许可。这是英国国家档案馆的一个免费项目,与Android无关。来源可在Github和Sourceforge上获得。 DROID documentation 很好。

另请参阅 Darwinsys file libmagic

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:-2)

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

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

希望它可以帮到你