Lorsque nous travaillons sur une application Java, il est courant que nous devions travailler avec certaines configurations, par exemple l'URL d'une base de données, le port d'un serveur, entre autres. Au lieu de coder en dur ces paramètres directement dans le code, nous souhaitons les obtenir depuis un endroit externe au code, comme un fichier de propriétés. Ou même pouvoir enregistrer les configurations au moment de l'exécution pour les lire plus tard.
Dans chacun de ces cas, nous pouvons développer nos propres solutions pour certains scénarios, par exemple créer un fichier texte et enregistrer dans la première ligne l'URL de la base de données, dans la deuxième ligne le port du serveur, etc. Mais cela peut être fastidieux et sujet aux erreurs, c’est pourquoi une solution plus robuste et évolutive est nécessaire. Pour ce type de cas, Java nous propose une solution très simple et efficace à utiliser, la classe Properties.
Propriétés est une classe trouvée dans le package java.util qui nous permet de sauvegarder les configurations à la fois temporairement en mémoire et de manière persistante dans un fichier de propriétés, afin que nous puissions les lire plus tard et les utiliser dans notre application. En créant une instance de la classe Properties, vous obtenez un objet qui se comporte comme un dictionnaire, où chaque configuration est enregistrée sous forme de paire clé-valeur.
Pour commencer, une instance de la classe Properties doit être créée.
Properties props = new Properties();
En héritant de la classe HashTable (qui à son tour hérite de Dictionary), au sein de la classe Properties, nous pouvons voir qu'elle possède des méthodes de type Object, alors qu'en réalité les valeurs sont censées être des chaînes de caractères ou String, et non , il n'est pas nécessaire de lancer une chaîne à chaque fois que vous travaillez avec une valeur. De cette façon, bien qu’il existe des méthodes courantes de création de carte au sein de l’instance, dans la plupart des cas, il ne sera pas nécessaire de les utiliser. Par exemple, au lieu d'utiliser get(Object key), vous pouvez utiliser getProperty(String key).
Pour définir une propriété, on utilise la méthode setProperty(String key, String value), comme son nom l'indique, cette méthode reçoit deux paramètres, la clé (comment on veut appeler la propriété) et la valeur (la valeur de la propriété ), étant donné que les deux paramètres sont toujours censés être de type String.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
Pour obtenir une propriété vous pouvez utiliser la méthode getProperty(String key), qui reçoit en paramètre la clé de la propriété que vous souhaitez obtenir. Si la propriété n'existe pas, null sera renvoyé.
Properties props = new Properties();
Pour éviter d'obtenir null au cas où une propriété n'existe pas, vous pouvez utiliser la méthode getProperty(String key, String defaultValue), qui reçoit une valeur par défaut comme deuxième paramètre.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
Comme il s'agit d'un objet de type carte (bien qu'il ne soit pas recommandé d'utiliser les méthodes HashTable), il possède la méthode EntrySet(), mais comme vous pouvez le voir, il est de type Object, une alternative pour parcourir toutes les propriétés est d'utiliser la méthode stringPropertyNames(), qui renvoie un ensemble de chaînes de caractères avec toutes les clés de propriété (les valeurs renvoyées ne sont pas dans un ordre spécifique).
var API_URL = props.getProperty("API_URL"); System.out.println(API_URL); // Output null
Un moyen plus rapide d'afficher toutes les propriétés consiste à utiliser la méthode list(PrintStream out), qui imprime toutes les propriétés dans le flux de sortie passé en paramètre, par exemple System.out.
var API_URL = props.getProperty("API_URL", "http://api.example.com"); System.out.println(API_URL); // Output http://api.example.com
Properties fournit les méthodes store() et storeToXML() afin que les propriétés puissent être enregistrées au format properties (key=value) et au format XML (cela peut être utile si les propriétés seront utilisées dans différents environnements) respectivement. N'utilisez pas la méthode save() car elle est obsolète et son utilisation n'est pas recommandée, car elle ne lève pas d'exceptions en cas d'erreur.
Avant d'enregistrer les propriétés dans un fichier, nous pouvons procéder comme suit pour vérifier par console ce qui est réellement enregistré à l'aide des méthodes store() et System.out, il est important de contrôler d'une manière ou d'une autre l'exception levée.
for (String prop : props.stringPropertyNames()) { System.out.println(prop + " = " + props.getProperty(prop)); } // Output DB_PORT = 3306 DB_PASS = p4ssw0rd DB_USER = root DB_HOST = localhost
En analysant le résultat, vous pouvez voir que dans la première ligne le commentaire qui est passé comme deuxième argument est enregistré (peu importe s'il s'agit d'une chaîne vide, s'il est nul, il n'est pas imprimé), dans le deuxième ligne, la date et l'heure auxquelles les propriétés ont été enregistrées sont enregistrées, et à partir de la troisième ligne, les propriétés sont enregistrées au format key=value.
Si la méthode storeToXML() est utilisée, un fichier avec le contenu suivant sera obtenu :
props.list(System.out); // Output -- listing properties -- DB_PORT=3306 DB_PASS=p4ssw0rd DB_USER=root DB_HOST=localhost
Pour enregistrer les propriétés dans un fichier appelé db.properties, vous pouvez procéder comme suit :
props.store(System.out, "Database Configuration"); // Output #Database Configuration #Thu Oct 10 11:06:04 CST 2024 DB_HOST=localhost DB_PASS=p4ssw0rd DB_PORT=3306 DB_USER=root
Une fois exécuté, et si aucune exception n'est levée, vous verrez qu'un fichier portant le nom db.properties a été créé dans le répertoire où le programme a été exécuté, avec le contenu suivant :
props.storeToXML(System.out, "Database Configuration"); // Output <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Database Configuration</comment> <entry key="DB_PORT">3306</entry> <entry key="DB_PASS">p4ssw0rd</entry> <entry key="DB_USER">root</entry> <entry key="DB_HOST">localhost</entry> </properties>
Pour enregistrer les propriétés au format XML, changez simplement la méthode store() en storeToXML().
Properties props = new Properties();
Supposons qu'une propriété ait été modifiée ou qu'une nouvelle soit ajoutée dans le fichier db.properties ou db.properties.xml, pour charger les propriétés de l'un ou l'autre des deux fichiers, soit dans properties ou XML, les méthodes Load() et LoadFromXML() peuvent être utilisées respectivement. Il est important de contrôler d'une manière ou d'une autre l'exception levée au cas où le fichier n'existe pas ou ne peut pas être lu.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
var API_URL = props.getProperty("API_URL"); System.out.println(API_URL); // Output null
Une fois les propriétés chargées, elles peuvent être affichées dans la console pour vérifier qu'elles ont été correctement chargées.
var API_URL = props.getProperty("API_URL", "http://api.example.com"); System.out.println(API_URL); // Output http://api.example.com
Comme nous l'avons vu, la classe Properties nous permet de travailler avec des fichiers de propriétés ou de configuration de manière efficace et simple, à la fois pour enregistrer et lire des propriétés, ce qui est intéressant à connaître et à utiliser dans nos applications Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!