k-file-detector

github: https://github.com/kylin-hunter/k-file-detector

介绍

一个检查文件类型的工具。

软件描述
根据文件的魔数 以及 内容判定文件类型
  1. 参考 https://www.garykessler.net/library/file_sigs.html
  2. 参考 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>
使用说明
  1. 支持的文件类型:

https://github.com/kylin-hunter/k-file-detector/blob/main/k-file-detector/src/main/resources/signature/file_types.yml

  1. 通过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()); //文件类型描述
        }
  1. 通过文件流检测

        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()); //文件类型描述
            }
        }
  1. 通过字节检测
        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()); //文件类型描述
        }
  1. 结果打印示例:
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
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐