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

Java Discussion :

Les archives en Java


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 26
    Points : 7
    Points
    7
    Par défaut Les archives en Java
    Bonjour

    Je travaille en ce moment à récupérer des archives et à les décompresser.
    Je souhaite utiliser la méthode la plus simple possible alors je convertis l'archive en zip et je dézippe

    Ce n'est peut etre pas la meilleur manière mais comment distinguer du zip, du rar, du 7z, du tar.gz ou encore ces fichiers data livré avec un meta.

    De là, je renomme le fichier et je tente le dezippage. Cependant, j'aimerai faire avant la verification qu'il s'agisse bien là d'une archive avant de la "convertir" en zip.

    Existe t il une méthode ou une manière de savoir si une file est une archive?

    je vous remercie d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Le nombre magique.
    C'est un ensemble d'octets placé en début de fichier qui identifie le format du fichier. Il est présent pour la quasi totalité des formats de compression de données.
    C'est un bon début mais n'est pas suffisant pour identifier à coup sûr le contenu d'un fichier.

    Tout dépend de ton besoin, mais le plus simple reste de regarder l'extension du fichier et d'appliquer le traitement dessus. S'il y a une erreur d'interprétation, alors le fichier est considéré comme corrompu.
    Évidemment, si le fichier ne possède pas d'extension...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 26
    Points : 7
    Points
    7
    Par défaut
    Merci pour votre réponse,

    En entrée, j'ai un objet, qui peut être une archive et que dans ce cas je renomme en zip sinon je compresse la donnée.

    C'est un convertZip commun.

    Et me baser sur l'extension...c'est chaud : Si j'ai comme fichier du .DATA, comment je sais si c'est une archive?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par Garywald Voir le message
    Et me baser sur l'extension...c'est chaud : Si j'ai comme fichier du .DATA, comment je sais si c'est une archive?
    C'est bien pour cette raison que j'ai ajouté la dernière phrase

    Il arrive parfois qu'on cherche une solution sans regarder la globalité du problème. Dans le cas présent, les fichiers sont générés comment ? Demande-toi s'il serait possible de simplifier ton traitement en modifiant légèrement l'application qui génère le fichier. Est-il possible que le système générant les fichiers ajoute lui-même l'extension correcte ? Cela simplifierait grandement la partie que tu dois traiter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 26
    Points : 7
    Points
    7
    Par défaut
    Est-il possible que le système générant les fichiers ajoute lui-même l'extension correcte ? Cela simplifierait grandement la partie que tu dois traiter.
    Si seulement , je ne choisis malheureusement pas les données que j'ai en entrée. elles peuvent être archivées ou non. Je dois les dézipper si c'est une archive, sinon juste les migrer ailleurs. Je peux donc avoir du .txt, du .pdf, du jar, du zip ^^
    Voilà pourquoi je recherchais une methode du type isArchive(), malheureusement malgré quelques piste du coté de DOSFileAttribute, il est trop incomplet et ne prend pas en compte le .DATA par exemple, je n'ai pas trouvé. Je cherche en ce moment à forcer mon type en zip et vérifier qu'il a des entrées. En cas d'erreur de conversion ou de dezippage, je pourrais savoir s'il c'est une archive;

  6. #6
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Si tu veux être sûr, tu prends ton fichier et tu essayes de le dézipper. Si ça plante, c'est que ce n'était pas un fichier zip (quelle que soit l'extension, chose à laquelle il ne faut pas se fier !) .

    Pour faire simple, regarde la classe ZipFile qui devrait contenir tout ce que tu as besoin pour tenter une décompression.
    Je ne suis pas mort, j'ai du travail !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 26
    Points : 7
    Points
    7
    Par défaut
    Coucou Eulbobo, merci pour ton aide,

    Oui j'ai déjà fait une petite recherche du coté de zipFile, ca marche bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    File f = new File("test/test.txt");
    ZipFile zf = null;
    try {
    	zf = new ZipFile(f2);
    } catch (ZipException e) {		
            System.out.println("Ce n'est pas un zip");
    } catch (IOException e) {
    	System.out.println("Il manque l'extension ou il s'agit d'un dossier ou ...etc");
    }
    if(zf!=null){
            System.out.println(zf.size());
    }

    J'ai deux problème qui en ressortent :

    1 - Le cas où la personne n'a pas mis d'extension à son fichier et transmet juste le nom du fichier, comment y remedier?
    2 - Le cas d'un 7z par exemple :p

    Merci d'avance pour votre aide.

  8. #8
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par Garywald Voir le message
    J'ai deux problème qui en ressortent :

    1 - Le cas où la personne n'a pas mis d'extension à son fichier et transmet juste le nom du fichier, comment y remedier?
    2 - Le cas d'un 7z par exemple :p
    L'extension de fichier, c'est juste une information qui n'a aucune valeur. C'est censé t'aider (ainsi que ton OS) à savoir comment "ouvrir" un fichier et ce qu'il contient.
    Donc extension ou pas, ça ne change rien ! Tu n'auras jamais de IOException s'il manque l'extension d'un fichier, seulement si le fichier n'existe pas

    Pour le cas d'un 7z, il faut aller chercher dans les librairies qui permettent de lire du 7z (parce que l'API de base ne le permet pas, c'est un format très spécifique le 7z...

    Il y a une librairie commons-compress qui permet de gérer...

    http://commons.apache.org/proper/com...ess/index.html

    Par contre, pour déterminer le type de fichier si l'extension n'est pas correcte, tu as deux solutions :
    - tu te fie à l'extension et tu dis que ce n'est pas une archive si le type du fichier ne correspond pas à son extension
    - tu testes tous les cas...
    Je ne suis pas mort, j'ai du travail !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 26
    Points : 7
    Points
    7
    Par défaut
    Donc extension ou pas, ça ne change rien ! Tu n'auras jamais de IOException s'il manque l'extension d'un fichier, seulement si le fichier n'existe pas
    Oui et non
    En fait, dans le cas d'un fichier data, il est en général accompagné d'un fichier meta du meme nom et donc sans extension on se fait insulter par la console ! (IOException).

    Pour le fichier 7z, je pense que je vais l'exclure, comme tu me l'as fait remarquer, c'est un cas exceptionnel et j'ai pas envie de rajouter de lib.

    Je passe la discussion en résolue, merci pour votre aide, ça me permet d'avancer ! Bonne continuation

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

Discussions similaires

  1. Les futurs tutoriels Java sur DVP ?
    Par Ricky81 dans le forum Débats
    Réponses: 65
    Dernier message: 06/01/2012, 03h33
  2. [Avis] Les meilleurs programmes Java ?
    Par christopheJ dans le forum ImageJ
    Réponses: 69
    Dernier message: 07/10/2008, 02h12
  3. Réponses: 5
    Dernier message: 15/02/2005, 11h32
  4. [Stratégie] Ant pour les tests en Java ?
    Par franckR dans le forum Tests et Performance
    Réponses: 5
    Dernier message: 08/03/2004, 10h38

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