k-file-detector
github: https://github.com/kylin-hunter/k-file-detector
介绍
一个检查文件类型的工具。
软件描述
根据文件的魔数 以及 内容判定文件类型
- 参考 https://www.garykessler.net/library/file_sigs.html
- 参考 xml/ooxml
安装教程
1、编译并发布到本地
gradle clean build publishToMavenLocal -x test
2、gradle中使用 (gradle.org)
implementation 'io.github.kylin-hunter:k-file-detector:1.0.11'
3、maven中使用 (maven.apache.org)
<dependency>
<groupId>io.github.kylin-hunter</groupId>
<artifactId>k-file-detector</artifactId>
<version>1.0.11</version>
</dependency>
使用说明
- 支持的文件类型:
https://github.com/kylin-hunter/k-file-detector/blob/main/k-file-detector/src/main/resources/signature/file_types.yml
- 通过file检测
DetectResult detectResult = FileDetector.detect(new File("xxxx.xxx")); //通过file检测
List<FileType> possibleFileTypes = detectResult.getPossibleFileTypes();
for (FileType fileType : possibleFileTypes) {
System.out.println("id=" + fileType.getId()); // 文件类型唯一编号
System.out.println("extensions=" + fileType.getExtensions()); // 文件类型对应的扩展名,可能是空
System.out.println("desc=" + fileType.getDesc()); //文件类型描述
}
- 通过文件流检测
try (InputStream in = new FileInputStream(new File("xxx.xxx"))) {
DetectResult detectResult = FileDetector.detect(in); // 如果知道文件名也可以调用 FileDetector.detect(in,"xxx.xxx)
List<FileType> possibleFileTypes = detectResult.getPossibleFileTypes();
for (FileType fileType : possibleFileTypes) {
System.out.println("id=" + fileType.getId()); // 文件类型唯一编号
System.out.println("extensions=" + fileType.getExtensions()); // 文件类型对应的扩展名,可能是空
System.out.println("desc=" + fileType.getDesc()); //文件类型描述
}
}
- 通过字节检测
byte[] content = org.apache.commons.io.FileUtils.readFileToByteArray(new File("xxx.xxx"));
DetectResult detectResult = FileDetector.detect(content); // 如果知道文件名也可以调用 FileDetector.detect(content,"xxx.xxx)
List<FileType> possibleFileTypes = detectResult.getPossibleFileTypes();
for (FileType fileType : possibleFileTypes) {
System.out.println("id=" + fileType.getId()); // 文件类型唯一编号
System.out.println("extensions=" + fileType.getExtensions()); // 文件类型对应的扩展名,可能是空
System.out.println("desc=" + fileType.getDesc()); //文件类型描述
}
- 结果打印示例:
2022-12-02 22:46:13.541 [main] INFO - io.github.kylinhunter.Test[25]: /Users/kylinhunter/k-file-detector/k-file-detector/src/test/resources/files/detected/office/2007/docx.docx
2022-12-02 22:46:13.677 [main] INFO - io.github.kylinhunter.Test[29]: id=k_docx
2022-12-02 22:46:13.677 [main] INFO - io.github.kylinhunter.Test[30]: extensions=[docx]
2022-12-02 22:46:13.677 [main] INFO - io.github.kylinhunter.Test[31]: desc=Microsoft Office Word File
2022-12-02 22:46:13.973 [main] INFO - io.github.kylinhunter.Test[25]: /Users/kylinhunter/k-file-detector/k-file-detector/src/test/resources/files/detected/audio_video/mov.mov
2022-12-02 22:46:13.974 [main] INFO - io.github.kylinhunter.Test[29]: id=mov
2022-12-02 22:46:13.974 [main] INFO - io.github.kylinhunter.Test[30]: extensions=[mov]
2022-12-02 22:46:13.974 [main] INFO - io.github.kylinhunter.Test[31]: desc=QuickTime movie file