Confusion sur le répertoire de travail actuel dans la méthode getAbsolutePath de File
Le getAbsolutePath du fichier a la tendance que si un chemin relatif ou simplement le nom du fichier est fourni dans le constructeur de fichier, il résoudra le chemin absolu en préfixant le répertoire de travail actuel.
La définition du répertoire de travail actuel est le répertoire dans lequel nous exécutons notre programme Java. Dans mon exemple, mon programme java réside à l'intérieurD:\my-app\src\App.java
Quand je fais un System.out.println(System.getProperty("user.dir"));
Ensuite, il devrait idéalement imprimer D:\my-app\src
Mais c'est en fait l'impression D:\my-app
Pourquoi en est-il ainsi?
Réponses
Lorsque vous démarrez une application à partir d'IntelliJ, son répertoire de travail est défini en fonction de ce qui est défini dans "Répertoire de travail" dans la boîte de dialogue "Exécuter / Déboguer les configurations" .
Là, vous pouvez définir le répertoire de travail sur une valeur fixe telle que D:\my-app\src
. Une autre option consiste à utiliser une variable de chemin . La liste des variables disponibles peut apparemment dépendre de beaucoup de choses - ouvrez la boîte de dialogue et voyez ce qui est disponible. Une option que je vois est $FileDir$
que j'imagine serait le répertoire du fichier de code source.
Je pense avoir trouvé la solution. Intellij était en fait à l'origine du problème en définissant implicitement le dossier src comme dossier source. Je l'ai trouvé en accédant au paramètre du module dans Intellij. Lorsque j'ai exécuté la même chose à partir d'une invite de commande, le répertoire de travail correct D:\my-app\src\
est sélectionné.