web-dev-qa-db-fra.com

Tester si un fichier est un fichier image

J'utilise un fichier IO et je veux savoir s'il existe une méthode pour vérifier si un fichier est une image?

32
lancegerday

Cela fonctionne assez bien pour moi. J'espère que je pourrais aider

import javax.activation.MimetypesFileTypeMap;
import Java.io.File;
class Untitled {
    public static void main(String[] args) {
        String filepath = "/the/file/path/image.jpg";
        File f = new File(filepath);
        String mimetype= new MimetypesFileTypeMap().getContentType(f);
        String type = mimetype.split("/")[0];
        if(type.equals("image"))
            System.out.println("It's an image");
        else 
            System.out.println("It's NOT an image");
    }
}
48
Ismael Abreu
if( ImageIO.read(*here your input stream*) == null)
    *IS NOT IMAGE*    

Et il y a aussi une réponse: Comment vérifier un fichier téléchargé s'il s'agit d'une image ou d'un autre fichier?

22
Krystian

Dans Java 7, il y a la méthode Java.nio.file.Files.probeContentType () . Sous Windows, cela utilise l'extension de fichier et le registre (il ne ne pas sonder le contenu du fichier). Vous pouvez ensuite vérifier la deuxième partie du type MIME et vérifier si elle se présente sous la forme <X>/image.

12
prunge

Vous pouvez essayer quelque chose comme ceci:

String pathname="abc\xyz.png"
File file=new File(pathname);


String mimetype = Files.probeContentType(file.toPath());
//mimetype should be something like "image/png"

if (mimetype != null && mimetype.split("/")[0].equals("image")) {
    System.out.println("it is an image");
}
9
Biagio Cannistraro

Vous pouvez essayer quelque chose comme ceci:

   import javax.activation.MimetypesFileTypeMap;

   File myFile;

   String mimeType = new MimetypesFileTypeMap().getContentType( myFile ));
   // mimeType should now be something like "image/png"

   if(mimeType.substring(0,5).equalsIgnoreCase("image")){
         // its an image
   }

cela devrait fonctionner, même si cela ne semble pas être la version la plus élégante.

4
GameDroids

Il existe différentes façons de procéder; voir d'autres réponses et les liens vers des questions connexes. (L'approche Java 7 me semble la plus intéressante, car elle utilise par défaut des conventions spécifiques à la plate-forme et vous pouvez fournir votre propre schéma pour la détermination du type de fichier.)

Cependant, je voudrais juste souligner qu'aucun mécanisme n'est entièrement infaillible:

  • Les méthodes qui reposent sur le suffixe du fichier seront trompées si le suffixe est non standard ou incorrect.

  • Les méthodes qui reposent sur des attributs de fichier (par exemple dans le système de fichiers) seront trompées si le fichier a un attribut de type de contenu incorrect ou aucun.

  • Les méthodes qui reposent sur l'examen de la signature du fichier peuvent être trompées par des fichiers binaires qui se trouvent simplement avoir les mêmes octets de signature.

  • Même en essayant simplement de lire le fichier sous forme d'image, vous pouvez être trompé si vous n'avez pas de chance ... selon le ou les formats d'image que vous essayez.

3
Stephen C