# File Truth Validator
**Repository Path**: sichengtech_admin/file-truth-validator
## Basic Information
- **Project Name**: File Truth Validator
- **Description**: File Truth Validator工具类通过读取文件的魔数(Magic Number)来检测文件的真实类型。 魔数是文件头部固定字节序列,用于标识文件格式。例如,JPEG 文件的魔数为 "FFD8FF",PNG 文件的魔数为 "89504E47"。通过分析这些魔数,可以准确判断文件的实际格式,而非仅依赖文件扩展名。
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-06-25
- **Last Updated**: 2025-06-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# File Truth Validator 文件真实类型检测工具
File Truth Validator 工具类通过读取文件的魔数(Magic Number)来检测文件的真实类型。
魔数是文件头部固定字节序列,用于标识文件格式。例如,JPEG 文件的魔数为 "FFD8FF",PNG 文件的魔数为 "89504E47"。通过分析这些魔数,可以准确判断文件的实际格式,而非仅依赖文件扩展名。
## 适用场景
在开发信息化系统时,通常需要处理文件上传功能(如上传图片、Office文档、PDF、视频等)。为保证系统安全性,需要验证文件的真实类型,而不仅依赖文件扩展名。
本工具是一个超级轻量化的解决方案,适合以下场景:
- 需要快速验证常见文件类型的真实性
- 对性能有较高要求
- 希望最小化依赖
## 支持的文件类型
目前支持识别的文件类型有48种,具体分类如下:
- **图片类型**:jpg、png、gif、tif、bmp、webp、jp2、svg
- **文档类型**:doc、xls、ppt、vsd、msi、docx、xlsx、pptx、rtf
- **Adobe文件**:psd、ai、eps、pdf
- **压缩类型**:zip、rar、tar、gz、jar、apk、7z
- **视频类型**:avi、mov、mpg、mp4、wmv、flv
- **音频类型**:wav、mp3、ram、rm、mid、amr
- **其它办公场景常用文件**:dbx、pst、wpd、qdf、pwl
- **结构化文档**:xml、html、json
## 与Apache Tika对比
Apache Tika是专门用于内容类型检测和内容提取的库,支持超过1400种文件格式。但其tika-parsers解析器引入了近百个三方jar包,依赖较重。
如果你的场景:
- 需要识别非常见文件格式
- 需要内容提取功能
- 可以接受较重依赖
可以考虑使用Apache Tika。如果你只需要轻量级的常见文件类型验证,File Truth Validator 工具是更好的选择。
## 核心功能
- **支持48种常见文件类型的检测**:
- 图片、文档、视频、音频等多种文件格式
- **精确匹配方法**:
- 避免误判,确保文件类型识别的准确性
- **特殊处理复杂文件格式**:
- 如MP4、WebP、SVG等,提供针对性的解析逻辑
- **轻量化设计**:
- 仅依赖Java标准库,易于集成和使用
## 使用方法
工具类提供了多种静态方法,供开发者根据需求选择使用:
1. **从Maven仓库导入依赖**
```
io.github.sichengtech
file-truth-validator
1.1
```
2. **检查输入流是否符合指定的文件类型**
```
try (InputStream input = new FileInputStream("example.jpg")) {
boolean isValidJpg = FileType4MagicNumber.checkFileType(input, "jpg");
System.out.println("Is valid JPG file: " + isValidJpg);
}
```
3. 检查文件对象是否与其扩展名声明的类型一致
```
File file = new File("example.docx");
boolean isValidDocx = FileType4MagicNumber.checkFileType(file);
System.out.println("Is valid DOCX file: " + isValidDocx);
```
4. 分析输入流并返回可能的文件类型列表
```
try (InputStream input = new FileInputStream("unknown_file")) {
List possibleTypes = FileType4MagicNumber.detectFileType(input);
System.out.println("Possible file types: " + possibleTypes);
}
```
## 编译环境
JDK 8