ImageReader returns .getFormatName() 方法格式错误

ImageReader returns the wrong format by .getFormatName() method

我在返回 jpg 格式时遇到问题。当我的文件是jpg格式时,最终格式是jpeg。我的方法:

public String getImageFormat(InputStream input) throws IOException {
    ImageInputStream stream = ImageIO.createImageInputStream(input);
    Iterator<ImageReader> iter = ImageIO.getImageReaders(stream);
    if (!iter.hasNext())
        return null;
    ImageReader reader = iter.next();
    ImageReadParam param = reader.getDefaultReadParam();
    reader.setInput(stream, true, true);
    try {
        reader.read(0, param);
        return reader.getFormatName();
    } finally {
        reader.dispose();
        stream.close();
    }
}

我注意到 orginatingProvider returns 中 jpg 的图像 reader 是这样的:

我想收到照片的实际格式,有没有人遇到过这样的情况,知道如何解决?

正如评论已经指出的那样,格式名称没有错。实际格式真的叫做“JPEG”,"Joint Photographic Experts Group" 的缩写。 .jpg.JPG 通常用于文件扩展名的原因是神秘的文件系统只允许 3 个字母的文件扩展名。

另一方面,如果您真正想知道的是文件扩展名,请使用 File 对象,并提取文件名中点后的部分。使用 ImageIO 对这样的任务来说太过分了。

File file = new File(...); 

String fileName = file.getName();
int index = fileName.lastIndexOf('.');

if (index >= 0) {
    return fileName.substring(index + 1);
}

// No period found
return null;