Хотя исходное решение для получения текущего каталога с помощью файла empty Stringработает. Но рекомендуется использовать user.dirсвойство для текущего каталога и user.homeдля домашнего каталога.
Path currentPath = Paths.get(System.getProperty("user.dir"));
Path filePath = Paths.get(currentPath.toString(), "data", "foo.txt");
System.out.println(filePath.toString());
вывод:
/Users/user/coding/data/foo.txt
Из документации по классу пути Java :
Путь считается пустым, если он состоит только из одного элемента имени empty. Доступ к файлу с использованием empty path is equivalent to accessing the default directoryфайловой системы.
Почему Paths.get("").toAbsolutePath()работает
Когда в объект передается пустая строка Paths.get(""), возвращаемый Pathобъект содержит пустой путь. Но когда мы вызываем Path.toAbsolutePath(), он проверяет, больше ли длина пути нуля, в противном случае он используетuser.dir системное свойство и возвращает текущий путь.
Вот код для реализации файловой системы Unix: UnixPath.toAbsolutePath ()
В основном вам нужно создать Pathэкземпляр снова, как только вы разрешите текущий путь к каталогу.
Также я бы предложил использовать File.separatorCharдля независимого от платформы кода.
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);
Вывод:
/Users/user/coding/data/foo.txt
filepath.toString()