IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Comment identifier le format d'un fichier ?


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut Comment identifier le format d'un fichier ?
    Salut à vous,

    Je n'arrive pas à trouver comment identifier le format d'un fichier en ne connaissant que deux choses :
    - ce qu'il est : image, video ou son (dans mon cas)
    - son contenu

    Pour être plus claire : j'ai par exemple une image de stockée dans ma base de données et je souhaiterais l'afficher ? comment m'y prendre pour identifer son format : jpg, png, etc. ?

    Avez vous des suggestions ?

    Merci.

  2. #2
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    pour l'image video et son , tu peux essayer de lire le contenu du fichier vers un tableau de characteres. Normalement les premiers caractères seront les memes pour tous les mpeg par exemple : c'est comme une signature.
    Sinon je vois pas trop comment faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try{
         FileReader fr = new FileReader(nomFichier);
         char charTab[] = new char[200]; //200 ou moins
         int i = fr.read(charTab);
         representationTexte = new String(charTab, 0, i); //Tu recupere la "signature" dans representationTexte
         fr.close();
         }
       catch(Exception e)  {}
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Enregistrer son format mime au moment de la sauvegarde en base de données peut être une solution
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Si l'exemple des images est celui qui te préoccupe réellement, je crois bien que la classe ImageIcon dans javax.swing permet de lire indifféremment les formats gif, jpg et png.

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Voir http://www.wotsit.org/ pour un descriptif des formats les plus courants (et de leur identificateur d'entete).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Tu ne peux pas simplement lire l'extension du fichier ?

    La plupart des logiciels fonctionnent en lisant l'extension des fichiers pour connaitre leurs format .

  7. #7
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Merci de vos suggestions.


    Citation Envoyé par Alwin
    Enregistrer son format mime au moment de la sauvegarde en base de données peut être une solution
    Ca m'aurait bien arangé, seulement dans les spécifications, il est indiqué que ma servlet recevra à la fois des images, des videos, du texte, etc. par un flux d'octets. Dans ce flux je peux identifier le type d'info par le premier octet qui me signifie que ce flux est une image ou une video, etc. Le content-type qui m'est fourni est application/octet-stream. Je dois me débrouiller pour trouver si cette image est de format PNG, JPG, etc...

    Citation Envoyé par de_bu_gg_er
    Tu ne peux pas simplement lire l'extension du fichier ?
    La plupart des logiciels fonctionnent en lisant l'extension des fichiers pour connaitre leurs format .
    Comme je l'explique plus haut, je n'ai qu'un tableau d'octet, par réellement un fichier, pas d'extension.


    Je pensais à parcourir ce flux pour identifier l'en-tête et connaître le format associé. Seulement, je me suis dit que certains d'entre vous connaitraient des api ou classes pouvant m'aider.

    Citation Envoyé par had35
    Si l'exemple des images est celui qui te préoccupe réellement, je crois bien que la classe ImageIcon dans javax.swing permet de lire indifféremment les formats gif, jpg et png.
    Je vais voir ça, ça me simplifierait la vie !


    Vous avez d'autres idées peut-être ?


  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Déolé pour ma réponse de tout a l'heure...

    Dans un de mes vieux codes qui lisait des images, j'avais une fonction qui donnait le format de l'image que je cherchais a ouvrir . elle lit les extensions et si l'extension ne donnais rien, elle lit les entete des fichiers et detecte si le fichier est en format jpg, bmp tiff...etc. Je pense que tu peux t'en inspirer pour faire la même chose pour tes fichier son et video:

    /**
    Attempts to determine the image file type by looking for
    'magic numbers' or text strings in the header.
    */
    int getFileType(String path, String name) {
    InputStream is;
    byte[] buf = new byte[132];
    try {
    is = new FileInputStream(path);
    is.read(buf, 0, 132);
    is.close();
    } catch (IOException e) {
    return UNKNOWN;
    }

    int b0=buf[0]&255, b1=buf[1]&255, b2=buf[2]&255, b3=buf[3]&255;
    //IJ.log("getFileType: "+ name+" "+b0+" "+b1+" "+b2+" "+b3);

    // Combined TIFF and DICOM created by GE Senographe scanners
    if (buf[128]==68 && buf[129]==73 && buf[130]==67 && buf[131]==77
    && ((b0==73 && b1==73)||(b0==77 && b1==77)))
    return TIFF_AND_DICOM;

    // Big-endian TIFF ("MM")

    if (b0==73 && b1==73 && b2==42 && b3==0)
    return TIFF;

    // Little-endian TIFF ("II")
    if (b0==77 && b1==77 && b2==0 && b3==42)
    return TIFF;

    // JPEG
    if (b0==255 && b1==216 && b2==255)
    return JPEG;

    // GIF ("GIF8")
    if (b0==71 && b1==73 && b2==70 && b3==56)
    return GIF;

    // PGM ("P2" or "P5")
    if (b0==80&&(b1==50||b1==53)&&(b2==10||b2==13||b2==32||b2==9))
    return PGM;

    // BMP ("BM")
    if (b0==66 && b1==77 && name.endsWith(".bmp"))
    return BMP;

    // PNG
    if (b0==137 && b1==80 && b2==78 && b3==71 && IJ.isJava2())
    return PNG;

    // ZIP containing a TIFF
    if (name.endsWith(".zip"))
    return ZIP;


    }
    }
    if (isText || name.endsWith(".txt")||name.endsWith(".dat"))
    return TEXT;

    return UNKNOWN;
    }

    voila voilou!

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par de_bu_gg_er
    Tu ne peux pas simplement lire l'extension du fichier ?

    La plupart des logiciels fonctionnent en lisant l'extension des fichiers pour connaitre leurs format .
    Sous Windows oui, sous les autres systèmes en général non puisque l'extension ne veut pas dire grand chose en soit et que en plus la case peut varier (.jpg et .JPG c'est pas la même chose sous UNIX). Les premiers caractères d'entêtes sont, en général, bien plus déterminants pour les formats binaires les plus courants.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Merci de votre aide précieuse.

    Pour l'instant je laisse ce topic ouvert au cas où vous auriez de nouvelles suggestions ou remarques.

    Je vous donnerai des nouvelles de mon avancée. Je dois faire ce travail sur trois types de médias :
    - image : *.png, *.jpg, *.gif, etc...
    - son : *.wav à priori tout le temps mais à boir
    - video : *.mpeg, *.avi ou 3jp (à voir)

    Je vais commencer le boulot sur l'image...

  11. #11
    Membre du Club Avatar de hadler
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Points : 63
    Points
    63
    Par défaut
    bonjour,

    Je dois aussi réussir à identifer le type d'un fichier en le lisant, pour être certain que ce n'est pas un exécutable camouflé, ou un script.

    J'ai d'aobrd penser utiliser le type MIME pour pouvoir les identifier, mais malheureusement ce type MIME ne permet pas d'identifier tous les types courant (bmp et mp3 par exemple ne sont pas reconnus)

    j'ai donc dans l'idée d'utiliser les identifying characters de chaque fichiers pour pouvoir les identifier avec certitude.

    voyez vous une méthode pour adapter l'utilisation du type MIME pour qu'il puisse reconnaitre tous les types de fichiers ? ou du moins ceux que je compte utiliser pour mon application ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2010, 16h53
  2. Réponses: 6
    Dernier message: 07/05/2009, 14h44
  3. Réponses: 6
    Dernier message: 15/01/2009, 11h01
  4. Réponses: 0
    Dernier message: 24/09/2008, 12h54
  5. Réponses: 2
    Dernier message: 11/02/2008, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo