📅  最后修改于: 2023-12-03 15:16:36.765000             🧑  作者: Mango
在Java 7中,增加了一个新的标准API,即.nio.file。其中,包括了一个可以检测文件类型的类FileTypeDetector。
FileTypeDetector可以接受一个Path路径参数,返回文件的MIME类型。
使用FileTypeDetector需要两个步骤:
对于第一步,需要继承FileTypeDetector,实现match方法。此方法返回字符串“文件类型/文件扩展名”,其中文件类型指的是文件的MIME类型,文件扩展名即为文件的后缀名(不包括点“.”)。
对于第二步,需要在META-INF/services下创建文件“java.nio.file.spi.FileTypeDetector”,并在其中写入自定义的FileTypeDetector的完整类名。这样,在运行时,Java会自动寻找该服务提供者,并将该类注册到FileTypeDetector的服务提供者列表中。
import java.nio.file.spi.FileTypeDetector;
import java.nio.file.Path;
import java.nio.file.Files;
import java.io.IOException;
public class MyFileTypeDetector extends FileTypeDetector {
@Override
public String probeContentType(Path path)
throws IOException {
String ext = Files.probeContentType(path);
if (ext == null) {
return null;
}
else if (ext.equals("text/plain")) {
return "text/csv";
}
else {
return ext;
}
}
}
上面的代码实现了一个简单的自定义FileTypeDetector,当文件类型为text/plain时,返回text/csv。代码中调用了Files.probeContentType(Path)方法,该方法利用Magic Number(魔数)来检测文件类型。
为了将MyFileTypeDetector注册为服务提供者,需要在META-INF/services下创建文件“java.nio.file.spi.FileTypeDetector”,并写入如下内容:
MyFileTypeDetector
FileTypeDetector是Java 7中新加入的成员之一,用于检测文件的MIME类型。使用FileTypeDetector需要实现自定义的FileTypeDetector,并将其注册为服务提供者。FileTypeDetector可以通过Magic Number来检测文件类型,但也可以根据自定义的规则进行检测。