我想检查传递的文件是否是图像,如果不是,我想显示一条消息,指出该文件不是图像。
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块的内容。那为什么不执行呢?
是否还有其他方法可以检查文件是否为图像?
答案 0 :(得分:31)
根据Javadocs,如果文件无法作为图像读取,则读取返回null
。
如果没有已注册的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.");
}
答案 1 :(得分:4)
根据API ImageIO.read(...)
,如果未找到能够读取指定文件的已注册null
,则返回ImageReader
,因此您只需测试null
的返回结果。
答案 2 :(得分:1)
使用它来获取扩展名:
String extension = "";
int i = fileName.lastIndexOf('.');
if (i > 0) {
extension = fileName.substring(i+1);
}
并根据需要检查条件
if(extension=="jpg"){
//your code
}
等等