Auch wenn die ursprüngliche Lösung zum Abrufen des aktuellen Verzeichnisses empty Stringfunktioniert. Es wird jedoch empfohlen, die user.dirEigenschaft für das aktuelle Verzeichnis und user.homefür das Ausgangsverzeichnis zu verwenden.
Path currentPath = Paths.get(System.getProperty("user.dir"));
Path filePath = Paths.get(currentPath.toString(), "data", "foo.txt");
System.out.println(filePath.toString());
Ausgabe:
/Users/user/coding/data/foo.txt
Aus der Java Path- Klasse Dokumentation:
Ein Pfad wird als leerer Pfad betrachtet, wenn er nur aus einem Namenselement besteht empty. Zugriff auf eine Datei über ein empty path is equivalent to accessing the default directoryDateisystem.
Warum Paths.get("").toAbsolutePath()funktioniert
Wenn eine leere Zeichenfolge an übergeben wird Paths.get(""), Pathenthält das zurückgegebene Objekt einen leeren Pfad. Beim Aufruf Path.toAbsolutePath()wird jedoch geprüft, ob die Pfadlänge größer als Null ist. Andernfalls werden die user.dirSystemeigenschaften verwendet und der aktuelle Pfad zurückgegeben.
Hier ist der Code für die Implementierung des Unix-Dateisystems: UnixPath.toAbsolutePath ()
Grundsätzlich müssen Sie die PathInstanz erneut erstellen , sobald Sie den aktuellen Verzeichnispfad aufgelöst haben.
Außerdem würde ich vorschlagen, File.separatorCharplattformunabhängigen Code zu verwenden.
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);
Ausgabe:
/Users/user/coding/data/foo.txt
filepath.toString()