Java获取文件类型,FileTypeUtil、Files、MimetypesFileTypeMap、URL多种实现对比

说说需求: 工作中需要判断文件是否是音频文件,实际生产环境中,遇到用户修改文件后缀的情况,导致逻辑处理异常。

正确获取到文件的类型是核心工作了,以下是实现的方案:

hutool的FileTypeUtilJDK的FilesJDK的MimetypesFileTypeMapJDK的URLguava的Files

引入依赖:

cn.hutool

hutool-all

5.7.17

com.google.guava

guava

33.1.0-jre

代码实现:

public class FileTypeUtils {

protected final static MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap();

public static void main(String[] args) throws IOException {

List files = Arrays.asList(

new File("E:\\GPT-SoVITS\\demo\\ambor\\原音频.wav"),

new File("E:\\GPT-SoVITS\\demo\\ambor\\原音频(修改后缀).mp3"),

new File("E:\\GPT-SoVITS\\demo\\ambor\\3925干音_响度归一化.mp3"));

for (File file : files) {

System.out.println(file.getName()+"\n\tgetFileTypeByHuTool:\t"+

getFileTypeByHuTool(file)+"\n\tgetFileTypeByJdkFiles:\t"+

getFileTypeByJdkFiles(file)+"\n\tgetFileTypeByJdkMimetypesFileTypeMap:\t"+

getFileTypeByJdkMimetypesFileTypeMap(file)+"\n\tgetFileTypeByJdkURLs:\t"+

getFileTypeByJdkURLs(file)+"\n\tgetFileTypeByGuavaFiles:\t"+

getFileTypeByGuavaFiles(file)+"\n\t");

}

}

protected static String getFileTypeByHuTool(File file){

return FileTypeUtil.getType(file);

}

protected static String getFileTypeByJdkFiles(File file) throws IOException {

return Files.probeContentType(file.toPath());

}

protected static String getFileTypeByJdkMimetypesFileTypeMap(File file) {

return fileTypeMap.getContentType(file);

}

protected static String getFileTypeByJdkURLs(File file) throws IOException {

URLConnection conn = file.toURL().openConnection();

return conn.getContentType();

}

protected static String getFileTypeByGuavaFiles(File file) throws IOException {

return com.google.common.io.Files.getFileExtension(file.getPath());

}

}

输出结果:

×标识的为识别失败。

原音频.wav原音频(修改后缀).mp33925干音_响度归一化.mp3getFileTypeByHuToolwavwavmp3 ×mp3getFileTypeByJdkFilesaudio/wavaudio/mpeg ×audio/mpeggetFileTypeByJdkMimetypesFileTypeMapaudio/x-wavaudio/mpeg ×audio/mpeggetFileTypeByJdkURLsaudio/x-wavaudio/x-wavcontent/unknown ×getFileTypeByGuavaFileswavmp3 ×mp3

结论: 优先使用JDK URL的检测方式,再使用JDK Files方式,优点是无需引入额外的依赖包,也能保证正确性。

Copyright © 2022 世界杯吉祥物_世界杯日本队 - ctpapi.com All Rights Reserved.