2013-08-13 15 views
11

Chcę sprawdzić, czy przekazany plik jest obrazem, a jeśli nie, chcę wyświetlić komunikat wskazujący, że plik nie jest obrazem.Jak sprawdzić, czy plik jest obrazkiem?

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

Gdy plik (odwołuje name) nie jest prawidłowy obraz nie jest ustawiony na false, dlaczego tak się dzieje? Czy powinienem zmienić typ wyjątku? Przeczytałem o try-catch i jak rozumiem, jeśli ImageIO.read nie powiedzie się i typ wyjątku jest IOException zawartość catch catch zostanie wykonany. Dlaczego więc nie został wykonany?

Czy istnieje inny sposób sprawdzenia, czy plik jest obrazem?

+0

@Gerret dzięki Szukałem ale nie widzę tego posta – Alaa

+0

Ten link będzie przydatna: http://stackoverflow.com/questions/9643228/test-if-file-is-an-image – Ruby

+0

Wysłałem ten sam link 22 minut temu;) – Gerret

Odpowiedz

25

Zgodnie z Javadocs, przeczytaj powraca null jeśli plik nie można odczytać jako obrazu.

Jeśli nie zarejestrowanym ImageReader twierdzi, że jest w stanie odczytać wynikowy strumień, null jest zwracana.

więc kod powinien być następujący:

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

Myślę, że to jest właściwe podejście, ale nie jest wolne od błędów. Spójrz na [to] (http://stackoverflow.com/questions/18079754/convert-and-display-image-from-byte-array?noredirect=1#comment26495118_18079754). W tym przypadku "ImageIO" nie może odczytać plików obrazu, nawet jeśli te pliki faktycznie były obrazami. – dic19

1

Użyj tego, aby uzyskać rozszerzenia:

String extension = ""; 

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

i sprawdzić warunki jak u chcą

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

i tak dalej

+3

Co się stanie, jeśli zmienię rozszerzenie obrazu z .jpeg na .mpeg? –

+0

Nie jestem pewien, czy to zawsze zadziała. Rozszerzenie może zostać zmienione lub może być nieobecne. – VirtualTroll

+0

Co, jeśli w ogóle nie ma rozszerzenia? Czy nie powinno to być przyczyną problemu? O ile mi wiadomo, prawidłowym sposobem jest sprawdzenie typu mime. –

3

Według API ImageIO.read(...) powraca null jeśli nie zarejestrował ImageReader stanie odczytać określony plik zostanie znaleziony, więc można po prostu przetestować zwrócony wynik dla null .

+0

Brent Worden był szybszy. Ale masz rację :) –

+0

dlatego właśnie głosowałem na obie odpowiedzi i przyjąłem jego odpowiedź^^ – Alaa

Powiązane problemy