Même si la solution originale pour obtenir le répertoire actuel en utilisant les empty Stringœuvres. Mais il est recommandé d'utiliser la user.dirpropriété pour le répertoire courant et user.homepour le répertoire personnel.
Path currentPath = Paths.get(System.getProperty("user.dir"));
Path filePath = Paths.get(currentPath.toString(), "data", "foo.txt");
System.out.println(filePath.toString());
production:
/Users/user/coding/data/foo.txt
À partir de la documentation de la classe Java Path :
Un chemin est considéré comme un chemin vide s'il se compose uniquement d'un élément de nom qui l'est empty. Accéder à un fichier à l'aide d'un empty path is equivalent to accessing the default directorydu système de fichiers.
Pourquoi ça Paths.get("").toAbsolutePath()marche
Lorsqu'une chaîne vide est transmise à Paths.get(""), l' Pathobjet renvoyé contient un chemin vide. Mais lorsque nous appelons Path.toAbsolutePath(), il vérifie si la longueur du chemin est supérieure à zéro, sinon il utilise la user.dirpropriété système et renvoie le chemin actuel.
Voici le code pour l'implémentation du système de fichiers Unix: UnixPath.toAbsolutePath ()
En gros, vous devez créer à Pathnouveau l' instance une fois que vous avez résolu le chemin du répertoire actuel.
Je suggérerais également d'utiliser File.separatorCharpour le code indépendant de la plate-forme.
Path currentRelativePath = Paths.get("");
Path currentDir = currentRelativePath.toAbsolutePath(); // <-- Get the Path and use resolve on it.
String filename = "data" + File.separatorChar + "foo.txt";
Path filepath = currentDir.resolve(filename);
// "data/foo.txt"
System.out.println(filepath);
Production:
/Users/user/coding/data/foo.txt
filepath.toString()