Навіть незважаючи на те, що оригінальне рішення для отримання поточного каталогу з використанням 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 Path :
Шлях вважається порожнім шляхом, якщо він складається виключно з одного елемента імені, який є 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()