2013-08-13 2 views
11

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

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

@Gerret спасибо Я искал, но я не видел этот пост – Alaa

+0

Эта ссылка будет полезна для Вас: http://stackoverflow.com/questions/9643228/test-if-file-is-an-image – Ruby

+0

Я отправил ту же ссылку 22 мин назад;) – Gerret

ответ

25

В соответствии с 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

Я думаю, что это правильный подход, но это не ошибка. Взгляните на [это] (http://stackoverflow.com/questions/18079754/convert-and-display-image-from-byte-array?noredirect1_comment26495118_18079754). В этом случае «ImageIO» не мог читать файлы изображений, даже если эти файлы были изображениями. – dic19

1

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

String extension = ""; 

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

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

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

и так далее

+3

Что делать, если я изменяю расширение изображения с .jpeg на .mpeg? –

+0

Я не уверен, что это всегда будет работать. Расширение может быть изменено или может отсутствовать. – VirtualTroll

+0

Что делать, если расширение отсутствует? Разве это не должно вызывать проблемы? Насколько я знаю, правильный способ - проверить тип mime. –

3

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

+0

Brent Worden был быстрее. Но вы правы :) –

+0

вот почему я проголосовал за оба ответа и принял его ответ ^^ – Alaa

Смежные вопросы