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 :

accès relatif a un *.properties dans un jar executable


Sujet :

Java

  1. #1
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut accès relatif a un *.properties dans un jar executable
    Bonjour,

    J'ai un jar exécutable dans lequel, j'ai un répertoire meta-inf qui contient un fichier.properties

    Depuis mon java, et sur eclipse, j'arrive a y accéder avec un chemin relatif tout bête: "meta-inf/fichier.properties"
    Mais dans mon jar, lors de l'éxécution via les commandes, il dit ne pas trouver le fichier correspondant à ce chemin...
    Du coup, je me demande ou je vais pouvoir mettre ce chemin...
    Est ce normal qu'il ne trouve pas le fichier?

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    oui puisque le "fichier" n'existe pas, seul existe ton jar pour le filesystem. Tu dois utiliser les ressources pour tout ce qui est dans le classpath:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream in = getClass().getResourceAsStream("/META-INF/fichier.properties");

  3. #3
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    Bonjour, merci pour votre message.
    En admettant que je récupère le fichier de cette manière, si je veux accéder à un autre fichier de ce type dans le disque dur, j'y accéderais de la manière classique en le traitant comme un fichier existe n'est ce pas?

    Ensuite, si jamais je load mon fichier properties se trouvant dans le jar, et que je le modifie, puis recrée le fichier properties; mon fichier sera modifié dans le jar pour la prochaine exécution n'est ce pas?

    Merci beaucoup

  4. #4
    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 jamesleouf Voir le message
    Ensuite, si jamais je load mon fichier properties se trouvant dans le jar, et que je le modifie, puis recrée le fichier properties; mon fichier sera modifié dans le jar pour la prochaine exécution n'est ce pas?
    Non...
    Enfin c'est techniquement possible mais certains systèmes d'exploitations empêche la modification de fichier lorsqu'ils sont utilisés Comme le Jar est utilisé par la JVM, tu ne peux pas modifier son contenu.


    Que cherches-tu à faire précisément ?

    a++

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    non, on ne modifie pas le contenu du jar. Si le fichier doit évoluer de par l'action de l'utilisateur, il faut le stocker en dehors du jar, typiquement dans le home de l'utilisateur (accessible via System.getProperty("user.home")).

  6. #6
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    ok, bah je le mettrais ailleurs alors
    En fait j'ai une appli dont certains paramètres seraient susceptibles de changer au fur et à mesure des exécutions.
    Le problème si je le place à l'extérieur du jar, c'est que si je veux mettre le programme sur un autre poste, il faudra recréer l'arborescence pour pouvoir y accéder. Ce qui n'est pas très malin.

  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
    Il suffit de cumuler les deux !

    1. Tu charges le fichier properties du jar, qui contiendra les valeurs par défaut.
    2. S'il existe, tu charges le fichier de configuration du user-home, qui pourrait redéfinir certaines valeurs.


    C'est pas bien compliquer à faire en plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
        Properties config = new Properties();
     
        InputStream defaultInput = getClass().getResourceAsStream("/META-INF/fichier.properties");
        try {
            config.load(defaultInput);
        } finally {
            defaultInput.close();
        }
     
        File file = new File(System.getProperty("user.home"), ".myapps/fichier.properties");
        if (file.exists()) {
            InputStream fileInput = new FileInputStream(file);
            try {
                config.load(fileInput);
            } finally {
                fileInput.close();
            }
        }

    a++

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    rien ne t'empeche d'embarquer dans ton jar une "configuration par défaut" et de la transférer vers la home si la home ne contient pas cette configuration

  9. #9
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    quelques remarques:
    - c'est bizarre de mettre la ressource dans les META-INF (en général c'est lié aux codes applicatifs)
    - ces modifications concernent l'ensemble de l'application ou juste l'environnement de l'utilisateur? (je pense à un tranfert des propriétés de l'application vers des préférences système -java.util.prefs-)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  10. #10
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    Les modifications concernent l'ensemble de l'application.
    Ca ne devrait pas vraiment poser de problèmes de le mettre ailleurs. Mais il faut que je conserve ce fichier dans la jar.
    En fait chaque exécution modifie la valeur d'un compteur, qui doit être utilisé avec ces dernières valeurs lors de l'exécution suivante. Mais c'est pas bien grave si je dois le fixer quelque part.

    L'un de vous m'a dit que c'était bizarre de mettre le properties dans META-IF; C'est mieux si je le mets "au dessus"?

    Autre question: Si mon appli utilsie des jars, est ce que je peux mettre des jars dans le jar de mon appli et y accèder directement? Si oui, de quelle manière je modifie le manifest?
    Je n'ai réussi à faire tourner mon appli, qu'avec les librairies sur mon disque, et le chemin physique écrit dans mon manifest...

    Merci pour tout à tout le monde en tout cas

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pas de jar dans le jar, les librairies de support doivent être fournies "à coté"

  12. #12
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    Merci à tous!

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

Discussions similaires

  1. Applet : Pb de Securité d'un .propertie dans un Jar
    Par CocoLeNain dans le forum Applets
    Réponses: 0
    Dernier message: 07/04/2010, 13h21
  2. Inclusion d'un fichier properties dans un jar avec la commande jar
    Par Lolitaaa dans le forum Général Java
    Réponses: 3
    Dernier message: 15/12/2009, 14h17
  3. chemin d'accés relatif pour une photo dans un état
    Par SG2607 dans le forum VBA Access
    Réponses: 13
    Dernier message: 11/01/2008, 14h03
  4. fichier de properties dans un jar
    Par davman_63 dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2007, 16h42
  5. [JAR] Comment écrire dans un fichier properties dans un jar
    Par Alec6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 05/10/2004, 15h16

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