Auch wenn die ursprüngliche Lösung zum Abrufen des aktuellen Verzeichnisses empty String
funktioniert. Es wird jedoch empfohlen, die user.dir
Eigenschaft für das aktuelle Verzeichnis und user.home
fü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 directory
Dateisystem.
Warum Paths.get("").toAbsolutePath()
funktioniert
Wenn eine leere Zeichenfolge an übergeben wird Paths.get("")
, Path
enthä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.dir
Systemeigenschaften 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 Path
Instanz erneut erstellen , sobald Sie den aktuellen Verzeichnispfad aufgelöst haben.
Außerdem würde ich vorschlagen, File.separatorChar
plattformunabhä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()