HOWTO · Java
Obtenir le répertoire d'accueil de l'utilisateur en Java
Cet article vous montre comment obtenir le répertoire de base de l'utilisateur en Java.
Sur cette page
Utilisez System.getProperty("user.home") en Java pour récupérer la valeur du répertoire personnel sous forme de String. Convertissez cette valeur en Path ou en File lorsqu’une API attend un objet représentant un chemin de système de fichiers. Les variables d’environnement telles que HOME et USERPROFILE ne sont des solutions de remplacement que si votre application a besoin d’une variable précise et peut gérer son absence ou une configuration différente.
Obtenir le répertoire personnel de l’utilisateur avec System.getProperty("user.home")
user.home est la propriété système Java destinée à contenir le répertoire personnel de l’utilisateur actuel. System.getProperty() en renvoie la valeur sous forme de chaîne. Cette valeur provient de l’environnement Java en cours d’exécution : elle peut être configurée au démarrage de la JVM et différer ainsi de l’emplacement attendu d’après le système d’exploitation. Sa récupération ne vérifie ni l’existence du chemin ni le fait que le processus puisse y accéder.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
public class Main {
public static void main(String[] args) {
String home = System.getProperty("user.home");
System.out.println("User home: " + home);
}
}
Le chemin affiché dépend de la machine et de la configuration du processus Java ; il n’existe donc pas de chemin de sortie unique valable partout. Le code affiche le libellé User home: en anglais, suivi de la valeur de la propriété ; il ne crée ni n’examine de répertoire.
Utiliser le répertoire personnel pour les opérations sur les fichiers
Les API de système de fichiers utilisent des objets représentant des chemins pour résoudre des chemins enfants ou transmettre un emplacement aux opérations sur les fichiers. Convertissez la chaîne renvoyée avec Path.of(home) sous Java 11 ou une version ultérieure, ou utilisez Paths.get(home) si votre projet cible une version antérieure de Java qui fournit java.nio.file. La classe File convient aussi aux API qui attendent un objet File.
Par exemple, après avoir récupéré home comme ci-dessus, Path homePath = Paths.get(home); crée un objet Path correspondant à cet emplacement. Résolvez un chemin enfant avec Path settings = homePath.resolve(".config").resolve("myapp");. Cette méthode assemble les composants selon les règles du système de fichiers par défaut, au lieu de concaténer des chaînes avec une barre oblique. Vous pouvez transmettre le Path obtenu à des API telles que Files.newBufferedReader() ou Files.createDirectories(), selon le besoin. Créer un objet Path ne crée rien sur le disque : choisissez une opération qui effectue l’action voulue sur le fichier et gérez ses erreurs d’E/S.
Si une API existante attend un objet File, construisez-le avec new File(home). Utilisez le type accepté par l’API concernée ; Path est le choix standard pour le code récent qui manipule le système de fichiers. Aucune de ces conversions ne vérifie l’emplacement ni n’accorde l’accès.
Lire HOME ou USERPROFILE dans les variables d’environnement
System.getenv("HOME") et System.getenv("USERPROFILE") lisent les variables d’environnement nommées, et System.getenv() renvoie une String ou null lorsque la variable demandée n’est pas accessible au processus. HOME est couramment utilisée dans les environnements de type Unix et USERPROFILE dans les environnements Windows, mais les applications, conteneurs, services et configurations de lancement peuvent différer. Les noms et les valeurs dépendent de l’environnement : ne supposez pas que vérifier le nom du système d’exploitation garantit que la variable correspondante existe ou désigne le répertoire voulu.
Si vous avez précisément besoin de l’une de ces variables, vérifiez qu’elle n’est pas null avant de la convertir en chemin ou de l’utiliser. Déterminez ce que votre application doit faire si elle manque, par exemple revenir à user.home ou signaler un problème de configuration. Préférez la propriété Java lorsque vous voulez simplement obtenir la valeur configurée par Java pour le répertoire personnel. N’affichez pas l’ensemble de l’environnement pour trouver une variable : cela peut révéler des paramètres sans rapport avec votre besoin ou des valeurs sensibles.
Utiliser Apache Commons IO si le projet en dépend déjà
Un projet qui inclut déjà Apache Commons IO peut utiliser FileUtils.getUserDirectory() pour obtenir un File, ou FileUtils.getUserDirectoryPath() pour obtenir un chemin sous forme de chaîne. Ces méthodes pratiques ne dispensent pas de tenir compte de la valeur fournie par l’environnement Java et ne justifient pas l’ajout d’une dépendance pour cette seule recherche. Ajoutez cette bibliothèque uniquement si le projet l’utilise déjà ou a besoin de ses autres utilitaires d’E/S.
Choisir une méthode et tenir compte de ses limites
Pour les opérations ordinaires sur le système de fichiers en Java, lisez user.home avec System.getProperty(), puis convertissez la valeur en Path ou en File selon l’API utilisée. Choisissez System.getenv() uniquement si votre application dépend spécifiquement d’une variable d’environnement, et prévoyez qu’elle puisse être absente ou personnalisée. Utilisez Apache Commons IO lorsque le projet en dépend déjà et que le type renvoyé convient à votre code.
Considérez la valeur du répertoire personnel comme un chemin de départ, et non comme une preuve que le répertoire existe, qu’il est accessible en écriture ou qu’il convient aux données de l’application. Vérifiez ou créez les répertoires au moyen des API de système de fichiers nécessaires à votre tâche, et gérez les erreurs d’E/S qu’elles documentent. Vous séparez ainsi la récupération du chemin de l’opération sur le système de fichiers et rendez explicites les hypothèses de votre application.