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 :

getRessource() d'un fichier local depuis un JAR


Sujet :

Entrée/Sortie Java

  1. #1
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut getRessource() d'un fichier local depuis un JAR
    Bonjour les ami(e)s,

    J'ai une question à laquelle je n'arrive pas à trouver de réponse depuis hier soir :

    J'ai du code qui est executé depuis un fichier JAR. Mon but est de lancer un getResource() (ou getResourceAsStream() ) de la classe Class sur un fichier en local.
    Voyons en gros ce que je veux dire :

    J'ai une bête classe Java (nommée Test) qui fait ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
      String x = "tmp/fichier.txt";
      URL url = getClass().getResource(x);
      System.out.println("URL null ? " + (url == null));
    } catch ...
    Notons que le fichier que je veux charger, fichier.txt, se trouve dans le répertoire tmp/, ce répertoire étant un sous-répertoire de celui contenant mon Test.jar.

    Dès que je lance "java -jar Test.jar", j'obtiens toujours sur la console :
    "URL null ? true"

    Alors je me suis dit que ma String définissant le chemin vers le fichier (variable x) est mal écrite. Du coup, j'ai essayé plein de solutions différentes :
    x = "/tmp/fichier.txt";
    x = "d:/test/tmp/fichier.txt";
    x = "file:/tmp/fichier.txt";
    x = "file:///tmp/fichier.txt";
    x = "file:///d:/tmp/fichier.txt";
    etc...
    Mais hélas, aucune ne fonctionne, et mon URL reste déséspèrement NULL

    Où est mon erreur ? Comment y remédier ?

    Merci de votre aide !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  2. #2
    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,


    getResource() permet d'obtenir une URL sur une ressource dans le CLASSPATH.

    Donc le répertoire qui comporte le répertoire tmp doit être ajouté dans le CLASSPATH. Si ce n'est pas le cas c'est normal que tu recoives null...

    getClass().getResource("tmp/fichier.txt") recherchera le fichier "tmp/fichier.txt" depuis le package de la classe (si la classe appartient au package 'com.package', alors ce sera le fichier com/package/tmp/fichier.txt qui sera recherché).

    getClass().getResource("/tmp/fichier.txt") recherchera le fichier "/tmp/fichier.txt" depuis la base du CLASSPATH...


    Solution : Soit tu utilises un new File() pour accéder au fichier en dehors du Jar, soit tu ajoutes le répertoire contenant ton Jar dans le Classpath, pour cela, il faut rajouter la ligne suivante dans le manifest de ton jar :
    a++

  3. #3
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    AdiGuba,

    Effectivement, j'avais complètement écarté le contenu du MANIFEST de mon cerveau dans la recherche de cette solution.
    En plaçant le "Class-Path: ./" dans ce fichier, du coup, ça passe bien mieux

    Merci pour tout !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

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

Discussions similaires

  1. Problème de lecture fichier local depuis une applet
    Par cyspeo dans le forum Applets
    Réponses: 2
    Dernier message: 15/09/2011, 14h27
  2. Lire un fichier (local) depuis fichier HTML externe (internet)
    Par diva_69 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 16/12/2008, 21h44
  3. Lire fichier son depuis le .JAR ?
    Par SheikYerbouti dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 10/04/2007, 01h18
  4. Accéder à un fichier XML depuis un jar
    Par Janitrix dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2007, 17h35
  5. [JAR]ouverture de fichier texte depuis executables jar
    Par julien31 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 01/03/2005, 15h53

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