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 :

Ouverture fichiers JAR et pas JAR :)


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut Ouverture fichiers JAR et pas JAR :)
    Dans mon appli, certains fichiers sont dans le jar: appli.jar/data/xml/*.xml
    D'autres dans le dossier data/xml/. Ce chemin se situe bien entendu dans le noeud où se trouve le jar.
    Ce principe me permet d'intégrer la notion de fichiers par défauts (inclut dans le jar) et les fichiers personnalisés (inclut dans le dossier perso de l'utilisateur).

    Pour simplifier:

    ./appli.jar[/data/xml/*.xml]
    ..data/
    ....xml/
    ......*.xml

    Je souhaiterai savoir (recherches infructueuses ) s'il existe une méthode (pas forcément toute prête) pour ouvrir un fichier soit à partir du jar, soit à partir d'un chemin externe au jar.


    Merci pour votre participation!

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Pour un fichier normal il y a la classe File et pour le jar il y a la classe JarFile.

  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,


    Pour récupérer un fichier à l'intérieur du jar c'est plutôt simple, puisqu'il suffit d'utiliser le ClassLoader. Par exemple, depuis une classe contenu dans ce même jar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = getClass().getClassLoader().getResource("data/xml/NomDuFichier.xml");
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = getClass().getResource("/data/xml/NomDuFichier.xml");
    (dans ce cas, attention à ne pas oublier le / initial sinon la recherche se fera depuis le package de la classe et non pas la racine du jar).

    Bien entendu les fichiers à l'intérieur du jar ne sont accessible qu'en lecture seule...



    Quand aux fichiers personnalisés, cela dépend de ce que tu veux dire par "dossier perso de l'utilisateur" !

    Si tu veux parler du répertoire utilisateur du système c'est assez simple également. Le mieux étant d'utiliser un répertoire qui contiendra les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	File file = new File(
    		System.getProperty("user.home") +
    		"/.NomApplication/" +
    		"data/xml/NomDuFichier.xml" );
    a++

  4. #4
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    OK. Je vais séparer en deux ma méthode de lecture de fichiers xml (une from Jar et une autre fromPasJar).

    J'ai également une autre méthode qui se charge d'ouvrir les icones et images:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public final static BufferedImage load(String filename) throws IOException {
    		return ImageIO.read(new File(filename));
    	}
    Je suis donc obligé d'adapter cette méthode en créant loadFromJar(...) et un loadFromPasJar(...)

    Je vais tester ça

    Merci pour les réponses rapides.

  5. #5
    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
    Je suis donc obligé d'adapter cette méthode en créant loadFromJar(...) et un loadFromPasJar(...)
    Ou tu peux utiliser une méthode qui te transforme le chemin en URL...

    Par exemple si j'ai bien compris : tu veux prendre le fichier s'il existe, ou sinon la ressource du jar, donc cela peut donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public final static URL toURL(String filename) {
    		File f = new File( "chemin_eventuel" + filename);
     
    		if (f.canRead()) {
    			// Si le fichier existe et peut être lu,
    			// on le retourne sous forme d'URL :
    			return f.toURI().toURL();
    		}
    		// Sinon on retourne la resource dans le jar
    		return NomDeLaClasse.class.getResource("/" + filename);
    	}

    Ensuite tu conserves donc un accès unique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public final static BufferedImage load(String filename) throws IOException {
    		return ImageIO.read(toURL(url));
    	}
    a++

    PS : méfies-toi des " new File() " avec un chemin relatif, car le répertoire de travail peut varier selon la manière dont tu lances le programme...

  6. #6
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Cette méthode me convient parfaitement!! Merci beaucoup adiGuba!

    Mais j'en viens à ta remarque concernant le new File(...):

    Prenons par exemple que "chemin_eventuel" doit être le chemin absolu du repertoire où se situe le jar.

    Pour le moment, j'avais mis ceci dans ma classe de constantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public final static String APPLI_PATH = new File(".").getAbsolutePath() + File.separator;
    Apparement, cela n'est pas correct dans tous les cas...

    Peut etre dois je utiliser un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaclasseMain.getResource(".");

  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 billynirvana
    Prenons par exemple que "chemin_eventuel" doit être le chemin absolu du repertoire où se situe le jar.
    Justement : new File(".") ne correspond pas forcément au répertoire où se trouve le jar, mais du répertoire depuis lequel tu l'as lancé. Donc cela peut varier et ne pas correspondre au répertoire du jar, selon que tu lances l'application en ligne de commande, via un raccourci ou un launcher, ou encore via Java Web Start...


    Citation Envoyé par billynirvana
    Peut etre dois je utiliser un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaclasseMain.getResource(".");
    Cela devrait te retourner null si je ne me trompe pas... Mais il y a un moyen d'utiliser getResource() pour obtenir le répertoire contenant le jar. J'avais déjà fait cela il y a quelques temps... Si je remet la main dessus je posterais le code...

    a++

  8. #8
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    J'ai trouvé ceci pour pourrait correspondre:

    http://www.developpez.net/forums/showthread.php?t=30372

    Reste plus qu'à découper ce qui est en trop.

  9. #9
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Dans la FAQ tout simplement

    http://java.developpez.com/faq/java/...YSTEME_dir_jar

    Voila,

    Bulbo

  10. #10
    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 bulbo
    Dans la FAQ tout simplement
    J'me disais bien en plus que le code (ou l'idée) devait venir du forum... mais j'ai oublié de jeter un coup d'oeil dans la FAQ

    a++

  11. #11
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Oui effectivement. Mes excuses. Et pourtant, je suis passé maintes fois sur cette page!!

    Merci!

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

Discussions similaires

  1. [Ouverture fichier] Différence debug/JAR
    Par SeymO dans le forum Général Java
    Réponses: 2
    Dernier message: 26/08/2010, 08h10
  2. Bug d'ouverture fichier .jar
    Par lolmanx dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 27/05/2010, 17h15
  3. [JAR]Création de Jar -> trouve pas la classe main
    Par Zapan dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 28/01/2006, 11h17
  4. [JAR]ouverture de fichier texte depuis executables jar
    Par julien31 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 01/03/2005, 15h53
  5. [JAR]eclipe et jar => pas la meme execution
    Par herminig dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 28/05/2004, 20h36

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