前言
工作中经常会用到,判断一个文件的文件类型,这里总结一把,一般判断文件类型的原理有2种方式:
根据文件扩展名判断优点:速度快,代码简单
缺点:无法判断出真实的文件类型,例如一些伪造的文件或者没有后缀名称的文件
根据文件流中前几个字符判断
优点:可以判断出真实的文件类型
缺点:速度慢,代码复杂
下面我会针对每个方法,去测试验证,测试文件如下:
test.png: 创建一个正常的png文件,其扩展名为test.png
test.doc: 复制一份上面的test.png文件,修改其文件名称为test.doc
1. 使用Files.probeContentType
Java1.7开始,提供了用于解决MIME类型的方法 Files.probeContentType:
public static void test() throws IOException{
Path path = new File("d:/test.png").toPath();
String mimeType = Files.probeContentType(path);
System.out.println(mimeType);
}
结果:
文件
结果
结论
test.png
image/png
✔️
test.doc
application/msword
❌
此方法利用已安装的FileTypeDetector实现来探查MIME类型。它调用每个实现的 probeContentType来解析类型。
但是,其默认实现是特定于操作系统的,并且可能会失败,具体取决于我们使用的操作系统。
结论:根据文件扩展名判断。
2. 使用URLConnection
URLConnection提供了几种用于检测文件的MIME类型的API。
2.1 使用getContentType
public void test(){