Как проверить, является ли файл изображением

Я хочу проверить, является ли файл переданным, и если нет, я хочу показать сообщение, указывающее, что файл не является изображением.

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. Так почему его не выполнили?

Есть ли другой способ проверить, является ли файл изображением?

Ответ 1

Согласно Javadocs, read возвращает 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.");
}

Ответ 2

В соответствии с API ImageIO.read(...) возвращает null, если не найден зарегистрированный ImageReader, способный читать указанный файл, поэтому вы можете просто проверить полученный результат для null.

Ответ 3

Используйте это, чтобы получить расширение:

String extension = "";

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

И проверьте условия как и хотите

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

и т.д.