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 :

Jar exécutable - utilisation dossier interne


Sujet :

Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 129
    Points : 128
    Points
    128
    Par défaut Jar exécutable - utilisation dossier interne
    Bonjour,

    je m'arrache les cheveux sur l'accès à un dossier inclus dans mon jar exécutable.

    Mon arbo:

    Un répertoire "ressources" inclus dans le buildPath, avec 3 sous répertoires.
    Ces trois sous répertoires sont donc à la racine du répertoire "classes" dans le target.

    Les trois sous dossiers en question, ont besoin d'être copiés (avec leur contenu) lors d'un de mes traitements.
    Pour utiliser un de ces dossiers, je fais ainsi, par exemple pour le dossier "objects":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File from = new File(this.getClass().getResource("/objects").getPath());
    Tout marche nickel sous eclipse.

    Une fois le .jar exécutable généré, les trois répertoires en questions se retrouvent à la racine du jar.
    A l'execution du jar,je me tape l'erreur suivante;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.io.FileNotFoundException: file:\D:\monJar.jar!\objects (La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte)
    Le chemin est bon, mis à part ce "!" qui sort je ne sais d'où

    Merci pour votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Salut,

    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.currentThread().getContextClassLoader().getResource(String);
    le ! signifie que tu entre dans le jar
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    En effet une fois dans le jar ce n'est plus un dossier réel pour le système d'exploitation. Même si certains explorateur de fichier peuvent l'afficher tel quel, ce n'est pas le cas.

    Or File représente un fichier/dossier dans le système de fichier de l'OS, et ne peut donc pas représenter un fichier/dossier à l'intérieur d'une archive jar/zip ou autre...

    Tu dois passer par la classe JarFile de ton jar principal et parcourir ses éléments...


    a++

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 129
    Points : 128
    Points
    128
    Par défaut
    Merci pour vos réponses

  5. #5
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Sinon pose toi la question de : est-ce que j'ai vraiment besoin de représenter mon fichier sous forme d'instance ?

    Sinon tu peux utiliser getResourceAsStream qui te permettra une lecture si tu as besoin

    En effet JarFile te permettra de naviguer dans la jar, mais si c'est pour une simple lecture rapide ca sera plus facile d'utiliser un stream
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 129
    Points : 128
    Points
    128
    Par défaut
    En fait j'ai besoin d'instancier un File pour pouvoir utiliser File.isDirectory(), dans ma méthode de copie récursive .
    Maintenant la question que je me pose est est il judicieux de packager mes dossiers de ressources dans le jar...
    Il me parait plus simple et plus logique d'avoir mon jar et à coté les dossiers de ressources qu'il va utiliser, puis par la suite packager le tout avec un soft de création de fichier d'installation pour distribuer mon appli.

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Malone Voir le message
    En fait j'ai besoin d'instancier un File pour pouvoir utiliser File.isDirectory(), dans ma méthode de copie récursive .
    A l'intérieur d'un jar ce n'est plus un vrai répertoire...


    Pour le reste, la question serait plutôt : pourquoi tu archives ces fichiers dans le jar pour les extraire ensuite ? Que contiennent ces fichiers ???


    a++

  8. #8
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    packager des resources dans un jar c'est tout à fait convenable, mais en effet c'est adapté quand on ne cherche pas à faire d'opération trop compliqué (comme un parcours récursif).
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

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

Discussions similaires

  1. utiliser connexion JNDI depuis jar exécutable
    Par ahsijetaisriche dans le forum JDBC
    Réponses: 1
    Dernier message: 24/11/2008, 20h56
  2. Réponses: 4
    Dernier message: 02/10/2007, 15h53
  3. [JAR][POLICE] Utiliser une police ttf dans un fichier jar
    Par Doc.Fusion dans le forum Général Java
    Réponses: 3
    Dernier message: 26/01/2005, 12h23
  4. [JAR]Problème utilisation manifest et jar
    Par doudine dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 07/01/2005, 10h21
  5. [Jar]Faire un jar exécutable
    Par Melchisedec dans le forum Général Java
    Réponses: 2
    Dernier message: 09/06/2004, 18h58

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