2013-08-13 20 views
11

Voglio controllare se il file passato è un'immagine e se non voglio mostrare un messaggio che indica che il file non è un'immagine.Come verificare se il file è un'immagine

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

Quando il file (a cui fa riferimento name) non è un'immagine valida non è impostato su false, perché sta succedendo questo? Devo cambiare il tipo di eccezione? Ho letto sul try-catch e, come ho capito, se ImageIO.read ha esito negativo e il tipo di eccezione è il contenuto di IOException del blocco catch verrà eseguito. Quindi, perché non è stato eseguito?

C'è un altro modo per verificare se il file è un'immagine ??

+0

@Gerret grazie ho cercato, ma non ho visto questo post – Alaa

+0

Questo link sarà utile a voi: http://stackoverflow.com/questions/9643228/test-if-file-is-an-image – Ruby

+0

Ho postato lo stesso link 22 minuti fa;) – Gerret

risposta

25

Secondo il Javadocs, read ritorna null se il file non può essere letto come un'immagine

Se non ImageReader registrato sostiene di essere in grado di leggere il flusso risultante, null viene restituito.

Quindi, il codice dovrebbe essere il seguente:

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

Penso che questo sia l'approccio giusto ma non è privo di errori. Dai un'occhiata a [questo] (http://stackoverflow.com/questions/18079754/convert-and-display-image-from-byte-array?noredirect=1#comment26495118_18079754). In questo caso 'ImageIO' non è stato in grado di leggere i file di immagine anche se quei file erano effettivamente immagini. – dic19

1

Usare questo per ottenere l'estensione:

String extension = ""; 

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

e verifica le condizioni come u vuole

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

e così via

+3

Cosa succede se cambio l'estensione di un'immagine da .jpeg a .mpeg? –

+0

Non sono sicuro che funzionerà sempre. Un'estensione può essere modificata o può essere assente. – VirtualTroll

+0

Cosa succede se non ci sono estensioni? Non dovrebbe causare un problema qui? Per quanto ne so, il modo corretto è verificare il tipo di mimo. –

3

Secondo API ImageIO.read(...) rendimenti null se non registrati ImageReader in grado di leggere il file specificato viene trovato, in modo da poter semplicemente testare risultato restituito per null .

+0

Brent Worden era più veloce. Ma hai ragione :) –

+0

è per questo che ho votato entrambe le risposte e ho accettato la sua risposta ^^ – Alaa

Problemi correlati