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

Langage Java Discussion :

Lecture d'une valeur composée dans un fichier .properties


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut Lecture d'une valeur composée dans un fichier .properties
    Bonjour,

    Dans mon cas, un exemple vaudra mieux qu'un long discours.
    Donc voila, j'ai un fichier .properties avec des valeurs qui peuvent se construire avec d'autre properties comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    catalina.home=/home/user/tomcat
    message.home=${catalina.home}/shared/classes/messages
    Or, quand je fais un petit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String repertoire = prop.getProperty("message.home");
    Je récupère dans ma variable "${catalina.home}/shared/classes/messages" et non le très désiré "/home/user/tomcat/shared/classes/messages"

    La question est donc, existe t il un moyen pour récupérer le message complet ou vais je être obligé de faire une fonction pour parser ma chaine?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    Tu pourrais regarder comment c'est fait dans Ant, peut-être qu'une classe dedans pourra te montrer leur solution.

  3. #3
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    La solution qui va me tuer, je pense que j'irai plus vite à faire un petit parseur .
    Le projet ant n'est pas mince alors pour aller retrouver l'éventuelle fonction qui fait ça, j'ai pas fini de chercher

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ou alors regarde là http://svn.apache.org/viewvc/ant/cor.../ant/property/
    Tu devrais trouver dedans, avec les expander et autres. Apparemment ils utilisent ParsePosition comme Format, qui fait un truc du genre de ce que tu veux

  5. #5
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Merci
    Je vais mettre en place leurs fonctions de parsing

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je ne dis pas que c'est pas une usine à gaz, faut voir, mais bon ca ressemble beaucoup à ce qu'ils ont fait ce que tu demandes

  7. #7
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    En fait, le code que tu m'as proposé a été mis sur leur SVN que depuis 4semaines alors que la dernière publication de jar remonte à bien avant donc je suis en train de dl sur leur svn pour me faire un petit jar maison, je pourrais bien tester ainsi mais ca semble etre une solution a mon problème

    Sinon, je ferais une petite fonction

  8. #8
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Bien, si ca intéresse certains, j'ai fait une petite classe utilitaire qui permet de lire un .properties pouvant être écrit comme décrit dans l'énoncé.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    package org.bluexml.tools.utils;
     
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.text.ParsePosition;
    import java.util.Properties;
     
    public class PropertiesUtils {
     
        private Properties prop;
        private String bundle;
     
        public static PropertiesUtils getInstance() {
            if (null == instance) {
                instance = new PropertiesUtils();
            }
            return instance;
        }
     
        private PropertiesUtils() {
            prop = new Properties();
        }
     
        private static PropertiesUtils instance;
     
        public String getProperties(String bundle, String propertie) {
            if (!bundle.equals(this.bundle)) {
                this.bundle = bundle;
                try {
                    prop.load(new FileInputStream(bundle + ".properties"));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return (String) parseProperties(prop.getProperty(propertie));
        }
     
        public Object parseProperties(String value) {
            if (value == null || "".equals(value) || value.indexOf('$') == -1) {
                return value;
            }
            ParsePosition pos = new ParsePosition(0);
            Object o = parseNextProperty(value, pos);
            if (o != null && pos.getIndex() == value.length()) {
                return o;
            }
            StringBuffer sb = new StringBuffer(value.length() * 2);
            if (o == null) {
                sb.append(value.charAt(pos.getIndex()));
                pos.setIndex(pos.getIndex() + 1);
            } else {
                sb.append(o);
            }
            while (pos.getIndex() < value.length()) {
                o = parseNextProperty(value, pos);
                if (o == null) {
                    sb.append(value.charAt(pos.getIndex()));
                    pos.setIndex(pos.getIndex() + 1);
                } else {
                    sb.append(o);
                }
            }
            return sb.toString();
        }
     
        private Object parseNextProperty(String value, ParsePosition pos) {
            int start = pos.getIndex();
            String propertyName = parsePropertyName(value, pos);
            if (propertyName != null) {
                Object result = prop.getProperty(propertyName);
                if (result != null) {
                    return result;
                }
                return value.substring(start, pos.getIndex());
            }
            return null;
        }
     
        private String parsePropertyName(String value, ParsePosition pos) {
            if ('$' == value.charAt(pos.getIndex())
                    && '{' == value.charAt(pos.getIndex() + 1)) {
                pos.setIndex(pos.getIndex() + 2);
                StringBuffer sb = new StringBuffer(value.length() * 2);
                while (value.charAt(pos.getIndex()) != '}') {
                    sb.append(value.charAt(pos.getIndex()));
                    pos.setIndex(pos.getIndex() + 1);
                }
                pos.setIndex(pos.getIndex() + 1);
                return sb.toString();
            }
            return null;
        }
     
    }
    Dans mon exemple, l'appel se fera ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PropertiesUtils.getInstance().getProperties("RessourceBundle", "message.home");
    RessourceBundle étant le nom de mon .properties

  9. #9
    Invité
    Invité(e)
    Par défaut
    Je crois avoir déjà vu cette structure quelque part... Content que ca ait marché

  10. #10
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Et oui, merci à toi
    Comme je l'avais dit dès le début
    Citation Envoyé par zorm Voir le message
    Je vais mettre en place leurs fonctions de parsing
    Ca marche très bien et je vais continuer à la compléter

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/04/2011, 20h28
  2. inserer une valeur composée dans un champ
    Par Daniela dans le forum IHM
    Réponses: 8
    Dernier message: 27/10/2010, 08h41
  3. [Toutes versions] Copier une valeur excel dans un fichier .txt
    Par mentat dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/03/2010, 21h05
  4. Assigner a une variable une valeur lue dans un fichier texte
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 22/12/2009, 14h46
  5. Réponses: 15
    Dernier message: 14/08/2009, 14h45

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