Mimo oryginalnego rozwiązania dla coraz aktualny katalog używając empty Stringprace. Ale zaleca się użycie user.dirwłaściwości dla katalogu bieżącego i user.homekatalogu domowego.
Path currentPath = Paths.get(System.getProperty("user.dir"));
Path filePath = Paths.get(currentPath.toString(), "data", "foo.txt");
System.out.println(filePath.toString());
wynik:
/Users/user/coding/data/foo.txt
Z dokumentacji klasy Java Path :
Ścieżka jest uważana za pustą ścieżką, jeżeli składa się wyłącznie z jednego elementu, który jest nazwa empty. Dostęp do pliku przy użyciu empty path is equivalent to accessing the default directorysystemu plików.
Dlaczego Paths.get("").toAbsolutePath()działa
Gdy do elementu przekazywany jest pusty ciąg Paths.get(""), zwracany Pathobiekt zawiera pustą ścieżkę. Ale kiedy wywołujemy Path.toAbsolutePath(), sprawdza, czy długość ścieżki jest większa niż zero, w przeciwnym razie używa user.dirwłaściwości systemowej i zwraca bieżącą ścieżkę.
Oto kod implementacji systemu plików Unix: UnixPath.toAbsolutePath ()
Zasadniczo Pathpo rozwiązaniu bieżącej ścieżki katalogu należy ponownie utworzyć instancję.
Sugerowałbym również użycie File.separatorChardla kodu niezależnego od platformy.
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);
Wynik:
/Users/user/coding/data/foo.txt
filepath.toString()