14

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

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");
}

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

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

4

3 回答 3

32

根据Javadocsnull ,如果文件不能作为图像读取,则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.");
}
于 2013-08-13T11:58:10.333 回答
4

如果没有找到可以读取指定文件的注册,根据APIImageIO.read(...)返回,因此您可以简单地测试返回的结果。nullImageReadernull

于 2013-08-13T12:00:22.517 回答
1

使用它来获取扩展名:

String extension = "";

int i = fileName.lastIndexOf('.');
if (i > 0) {
    extension = fileName.substring(i+1);
}

并根据需要检查条件

if(extension=="jpg"){
//your code
}

等等

于 2013-08-13T11:54:17.587 回答