如何检查文件是否是图像

Ala*_*laa 14 java image exception

我想检查传递的文件是否是图像,如果不是,我想显示一条消息,指示该文件不是图像.

try{
    Image img = ImageIO.read(new File(name));
}catch(IOException ex)
{
    valid=false;
    System.out.println("The file" + name + "could not be opened, it is not an image");
}
Run Code Online (Sandbox Code Playgroud)

当文件(引用name)不是图像有效时未设置为false,为什么会发生这种情况?我应该更改例外的类型吗?我已经阅读了关于try-catch的内容,据我所知,如果ImageIO.read失败并且异常的类型是IOException,将执行catch块的内容.那为什么不执行呢?

有没有其他方法来检查文件是否是图像?

Bre*_*den 31

根据Javadocs,null如果文件无法作为图像读取,则返回read.

如果没有已注册的ImageReader声称能够读取生成的流,null则返回.

所以,您的代码应该如下:

try {
    Image image = ImageIO.read(new File(name));
    if (image == null) {
        valid = false;
        System.out.println("The file"+name+"could not be opened , it is not an image");
    }
} catch(IOException ex) {
    valid = false;
    System.out.println("The file"+name+"could not be opened , an error occurred.");
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是正确的方法,但并非没有错误。看看[this](http://stackoverflow.com/questions/18079754/convert-and-display-image-from-byte-array?noredirect=1#comment26495118_18079754)。在这种情况下,即使ImageIO实际上是图像,也无法读取它们。 (2认同)

Evg*_*eev 5

根据API的ImageIO.read(...)返回结果,null如果没有找到ImageReader可以读取指定文件的注册,那么您可以简单地测试返回的结果null