Java判断文件的真实类型

ImageIO判断图片类型
ImageInputStream image = ImageIO.createImageInputStream(in);
Iterator<ImageReader> readers = ImageIO.getImageReaders(image);
readers.next().getFormatName();

JDK内置了下面类型的ImageReader:

图像类型扩展名MIME类型魔数(十六进制)魔数(ASCII)
gifgifimage/gif474946373961GIF79a
bmpbmpimage/bmp424dBM
wbmpwbmpimage/vnd.wap.wbmp判断很复杂
pngpngimage/png、image/x-png89504e470d0a1a0a�PNG
jpg、jpegjpg、jpegimage/jpegffd8��
webpwebpimage/webp52494646{4字节文件大小}574542505650382056503858RIFF{4字节文件大小}WEBPVP8 VP8X

我们可以通过JNI + ServiceLoader支持新的文件类型,参考Webp扩展:Web-imageio

Files判断文件类型
public class Files {
    ...
    public static String probeContentType(Path path) {
        ...
    }
    ...
}

通过FileTypeDetector进行文件类型的检测,可能是只检查文件名称、或者检查文件属性或者文件的字节,但是目前看java中只实现了检查文件名称的方式,还需要在${user.home}/.mime.types中配置扩展名到mime type的映射.

通过Linux的工具file
file --mime-type <待判断的文件>
file -m <magic文件或者目录> --mime-type <待判断的文件>

该工具通过解析文件内容来判断文件的真实类型,我们可以通过Java Runtime工具来对该工具实现调用。

该工具依赖于/usr/share/file/magic.mgc文件或者/usr/share/file/magic目录,magic文件里定义了文件类型判断的规则,注意不同版本的file工具的magic文件可能存在不兼容的情况。

源码地址:Linux file工具 github路径

参考

利用文件头标志判断文件类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子的木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值