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 :

Accéder à des fichiers depuis le jar


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Accéder à des fichiers depuis le jar
    Bonjour,
    Voici mon problème :
    Je développe une petite application sous Netbeans qui utilise plusieurs fichiers .properties. Tout marche bien sous Netbeans. Mais si je veux l'utiliser en dehors de Netbeans (je lance donc le jar) l'application ne trouve plus les fichiers.
    C'est juste ces lignes qui s'occupe du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Properties prop = new Properties();
    File file = new File("settings.properties");
    FileInputStream fis = new FileInputStream(file);
    Je n'ai pas réussi à utiliser getResource, le fichier n'était pas trouvé même en utilisant NetBeans.
    Merci de votre aide.

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse.class.getResourceAsStream(fileNameString)
    Le fichier doit se trouver dans le même répertoire que MaClasse. Sinon dans fileNameString, tu peux spécifier des sous-répertoires.
    La FAQ en parle (dans les fichiers je crois).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Oui, getResourceAsStream marchait. Mais à un autre endroit, j'ai besoin d'écrire dans ce fichier. Donc là j'étais obligé d'utiliser getResource pour avoir l'URL et là ça ne marchait plus...
    A moins qu'il y ait des moyens pour transformer un inputStream en outputStream ?

  4. #4
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Je pense que tu peut récupérer le File par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new File(Test.class.getResource(fileNameString).getFile()
    A voir la Javadoc si la méthode getFile() est pertinente, mais il me semble que c'est ça.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Avec ça, j'ai toujours le problème du getResource : si je met le fichier dans le même répertoire que la classe (mais comment je ferais une fois le jar construit ?), le fichier n'est pas trouvé (file.exists() renvoie false). Pourtant le chemin est bon... Et si je le met dans un répertoire différent j'ai un nullPointerException (normal).

  6. #6
    Membre régulier Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Normalement il me semble qu'il est impossible d'écrire dans un fichier se trouvant dans un jar. Il faut donc sortir du jar le fichier properties que tu veux lire et écrire.

  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
    Salut,

    Citation Envoyé par visiwi Voir le message
    Je pense que tu peut récupérer le File par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new File(Test.class.getResource(fileNameString).getFile()
    A voir la Javadoc si la méthode getFile() est pertinente, mais il me semble que c'est ça.
    Non non et non !
    Cela ne marchera que si on accède directement au fichier, mais pas lorsqu'il est dans un jar ou autre...

    Dans un jar les fichiers sont en lecture seule. Point barre il n'y a pas à chercher plus loin !



    • getResource() permet de récupérer un fichier dans le classpath, où qu'il soit (système de fichier local, archives ZIP ou JAR, sur une ressource réseau...).
    • File ou toute méthode demandant un chemin de fichier local ne pourra accéder qu'aux fichiers sur le système de fichier local...


    vincbobor > Je suppose qu'il s'agit du fichier de configuration de ton application ?

    La meilleure solution est d'utiliser un chemin précis.
    Tu as deux possibilités :
    • Utiliser un chemin en dur, qui sera donc partagé par tous les utilisateurs (ils devront avoir les droits d'écritures sur ce fichier).
    • Créer un fichier dans System.getProperty("user.home"), ce qui permettra aux utilisateurs d'avoir chacun leurs propres fichiers de configuration.
      Note : On utilise en général un nom de fichier commençant par un point "." pour qu'il soit caché sous les systèmes Unix. Sous Windows cela correspond à un répertoire non visible directement.



    Tu pourrais même utiliser 2 fichiers :
    • Celui de ton jar qui contiendrait la configuration par défaut, non modifiable.
    • Puis celui du user.home avec les valeurs personnalisés par l'utilisateur.



    a++

  8. #8
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Dans un jar les fichiers sont en lecture seule.
    Oui, j'ai répondu trop vite , mea culpa et toute cette sorte de chose à vincbobor.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Ok j'ai utilisé System.getProperty("user.home"), ça marche
    Merci beaucoup!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/07/2013, 04h28
  2. Accéder à des fichiers depuis plusieurs webapps
    Par julien20vt dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 11/10/2011, 16h12
  3. Réponses: 0
    Dernier message: 07/09/2009, 11h33
  4. accéder à des fichiers mysql
    Par totolala dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/08/2005, 21h51
  5. [JAR] Accéder à un fichier dans un jar
    Par Nanoua dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/07/2004, 13h00

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