16 votes

Comment lire un fichier de propriétés en java dans l'ordre original

J'ai besoin de lire un fichier de propriétés et générer un Propriétés en Java. Je le fais en utilisant :

Properties props = new Properties();
props.load(new FileInputStream(args[0]));
for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
}

Cependant, les propriétés renvoyées par props.propertyName ne sont pas dans l'ordre du fichier de propriétés original. Je comprends que Propriétés ne sont que des tableaux de hashs, non générés, à l'ancienne. Je cherche une solution de contournement. Une idée ? Merci !

2voto

Noel M Points 6263

Le fait qu'ils soient représentés comme un Hashtable sous le capot signifie que leur commande n'est pas tenue de quelque manière que ce soit.

Je vous suggère de "rouler votre propre" lecteur de propriétés si vous êtes absolument désespéré pour cette fonctionnalité.

2voto

GKislin Points 254

Implémentation correcte de keySet :

public class OrderedProperties extends Properties {

  private Set<Object> keySet = new LinkedHashSet<Object>(100);

  @Override
  public Enumeration<Object> keys() {
    return Collections.enumeration(keySet);
  }

  @Override
  public Set<Object> keySet() {
    return keySet;
  }

  @Override
  public synchronized Object put(Object key, Object value) {
    if (! keySet.contains(key)) {
        keySet.add(key);
    }
    return super.put(key, value);
  }

  @Override
  public synchronized Object remove(Object key) {
    keySet.remove(key);
    return super.remove(key);
  }

  @Override
  public synchronized void putAll(Map values) {
    for (Object key : values.keySet()) {
        if (! containsKey(key)) {
            keySet.add(key);
        }
    }
    super.putAll(values);
  }
}

0voto

Riduidel Points 13456

Sous-classez les propriétés pour mémoriser l'ordre de lecture et créez une énumération qui utilise la liste des clés ordonnées ?

0voto

Carlos Heuberger Points 11804

Pour résoudre le problème : "exécuter les classes en fonction de l'ordre dans le fichier de propriétés". J'ai normalement utilisé une des 2 possibilités :

1 - utiliser une propriété comme une liste séparée par des virgules avec les noms des classes ou avec les clés de la définition de la classe.

loadClasses = classe-définition-A, classe-définition-B, classe-définition-C

ou (utile si la "définition" consiste en plus d'une propriété)

loadClasses = keyA, keyB, keyC
cléA = classe-définition-A
cléB = classe-définition-B
cléC = classe-définition-C

2 - utiliser une clé suivie d'un index (compteur). Lire les clés dans une boucle jusqu'à ce qu'aucune valeur ne soit trouvée.

class1 = classe-définition-A
class2 = classe-définition-B
class3 = classe-définition-C

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X