HOWTO · Java
Fichier de propriétés Java
Cet article traite du fichier de propriétés en Java.
Sur cette page
La classe Properties de Java stocke la configuration d’une application sous forme de paires clé-valeur, généralement dans un fichier portant l’extension .properties. Utilisez setProperty() pour ajouter des clés et des valeurs sous forme de chaînes, store() pour les enregistrer, load() pour les lire et getProperty() pour récupérer un paramètre précis. La méthode list() permet d’afficher les entrées chargées à des fins d’inspection.
Le travail avec les fichiers .properties est couvert dans le groupe E/S de fichiers et propriétés du Tutoriel Java, où sont rassemblés les guides de configuration Java.
Créer et définir des valeurs dans un fichier de propriétés Java
Un fichier de propriétés contient une entrée par ligne. Par exemple, version=1.1 et projectName=PropertiesFileExample sont deux entrées distinctes ; une ligne commençant par # ou ! est un commentaire. Le format accepte =, : ou un espace comme séparateur entre la clé et la valeur. Les espaces placés avant une clé sont ignorés, et les valeurs peuvent contenir des espaces. Utilisez setProperty() pour ajouter chaque paire, puis store() pour enregistrer l’ensemble et, éventuellement, un commentaire.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Properties;
public class JavaExample {
public static void main(String[] args) throws IOException {
Path directory = Files.createTempDirectory("properties-demo-");
Path file = directory.resolve("myConfigs.properties");
Properties properties = new Properties();
properties.setProperty("version", "1.1");
properties.setProperty("projectName", "PropertiesFileExample");
properties.setProperty("date", "2021/12/27");
try (OutputStream output = Files.newOutputStream(file)) {
properties.store(output, "Application settings");
}
}
}
Files.newOutputStream() crée le fichier s’il n’existe pas et le tronque s’il existe déjà. Son répertoire parent doit exister ; cet exemple crée d’abord un répertoire temporaire. Le bloc try-with-resources ferme le flux même si l’écriture échoue. Si vous utilisez plutôt un chemin fixe, créez son répertoire parent avant d’ouvrir le fichier. En plus des entrées, store() écrit un commentaire et un horodatage généré ; ces lignes de commentaire varient donc d’une exécution à l’autre. Avec un OutputStream, les caractères non latins sont échappés selon le format des fichiers de propriétés ; un Writer permet de choisir explicitement l’encodage des caractères.
Si votre code utilise java.io, new FileOutputStream(path) crée également le fichier s’il n’existe pas ou tronque le fichier existant, et exige lui aussi que le répertoire parent existe. Fermez-le avec try-with-resources, comme le flux ci-dessus.
Récupérer une propriété depuis un fichier de propriétés Java
Pour récupérer un paramètre, ouvrez le fichier enregistré en lecture, appelez load() sur un objet Properties, puis transmettez la clé souhaitée à getProperty(). Cet exemple écrit le fichier et le lit au cours de la même exécution ; il ne dépend donc pas d’un fichier créé par un autre programme. Le flux d’entrée utilise lui aussi try-with-resources, ce qui libère le fichier après son chargement.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Properties;
public class JavaExample {
public static void main(String[] args) throws IOException {
Path directory = Files.createTempDirectory("properties-demo-");
Path file = directory.resolve("myConfigs.properties");
Properties saved = new Properties();
saved.setProperty("date", "2021/12/27");
try (OutputStream output = Files.newOutputStream(file)) {
saved.store(output, "Application settings");
}
Properties loaded = new Properties();
try (InputStream input = Files.newInputStream(file)) {
loaded.load(input);
}
String date = loaded.getProperty("date");
System.out.println(date == null ? "No date setting" : date);
}
}
Si la clé est absente, getProperty() renvoie null ; la méthode ne déclenche pas d’erreur. Si le paramètre est facultatif, vérifiez si le résultat vaut null, ou fournissez une valeur de remplacement avec getProperty("theme", "light"). Un fichier introuvable, un chemin illisible ou un autre problème d’accès au fichier est différent : son ouverture ou son chargement peut provoquer une IOException. Gérez cette exception à la limite de l’application avec un message utile, ou laissez l’appelant décider de la marche à suivre. L’exemple déclare IOException sur main afin de rendre le déroulement de la récupération plus lisible ; dans une application de production, on la capture généralement à l’endroit où l’on peut fournir davantage de contexte.
Récupérer toutes les clés et valeurs d’un fichier de propriétés Java
Pour afficher rapidement les entrées dans la console, chargez le fichier et appelez list() avec System.out. L’exemple complet qui suit crée d’abord son propre fichier d’entrée, puis affiche les entrées chargées. Il contient un second paramètre afin que le résultat montre plusieurs paires clé-valeur. Les libellés visibles dans les exemples de code sont conservés en anglais, car les blocs de code restent inchangés.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Properties;
public class JavaExample {
public static void main(String[] args) throws IOException {
Path directory = Files.createTempDirectory("properties-demo-");
Path file = directory.resolve("myConfigs.properties");
Properties saved = new Properties();
saved.setProperty("version", "1.1");
saved.setProperty("projectName", "PropertiesFileExample");
try (OutputStream output = Files.newOutputStream(file)) {
saved.store(output, "Application settings");
}
Properties loaded = new Properties();
try (InputStream input = Files.newInputStream(file)) {
loaded.load(input);
}
loaded.list(System.out);
}
}
list() sert à produire une liste lisible pour le diagnostic ; ce n’est pas une API générale d’itération. La présentation et l’ordre des entrées ne constituent pas un format stable à analyser ou à comparer. Si le code de l’application doit traiter les entrées, parcourez plutôt les entrées ou les clés de Properties et traitez chaque valeur comme une chaîne. Lorsque l’ordre ou les commentaires comptent, gardez le fichier d’origine comme source de référence : l’enregistrement des propriétés sert à stocker des données de configuration, tandis que list() ne montre que les valeurs actuellement chargées en mémoire.