«1. Обзор
Получить текущий рабочий каталог в Java несложно, но, к сожалению, в JDK нет прямого API для этого.
В этом руководстве мы узнаем, как получить текущий рабочий каталог в Java с помощью java.lang.System, java.io.File, java.nio.file.FileSystems и java.nio.file.Paths.
2. Система
Начнем со стандартного решения, используя System#getProperty, предполагая, что имя нашего текущего рабочего каталога — Baeldung во всем коде:
static final String CURRENT_DIR = "Baeldung";
@Test
void whenUsingSystemProperties_thenReturnCurrentDirectory() {
String userDirectory = System.getProperty("user.dir");
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
Мы использовали встроенный ключ свойства Java. user.dir для получения текущего рабочего каталога из карты свойств системы. Это решение работает во всех версиях JDK.
3. Файл
Давайте рассмотрим другое решение с использованием java.io.File:
@Test
void whenUsingJavaIoFile_thenReturnCurrentDirectory() {
String userDirectory = new File("").getAbsolutePath();
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
Здесь File#getAbsolutePath внутренне использует System#getProperty для получения имени каталога, аналогично нашему первому решению. Это нестандартное решение для получения текущего рабочего каталога, и оно работает во всех версиях JDK.
4. Файловые системы
Другой допустимой альтернативой может быть использование нового API java.nio.file.FileSystems:
@Test
void whenUsingJavaNioFileSystems_thenReturnCurrentDirectory() {
String userDirectory = FileSystems.getDefault()
.getPath("")
.toAbsolutePath()
.toString();
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
Это решение использует новый Java NIO API и работает только с JDK 7 или выше.
5. Пути
И, наконец, давайте рассмотрим более простое решение для получения текущего каталога с помощью java.nio.file.Paths API:
@Test
void whenUsingJavaNioPaths_thenReturnCurrentDirectory() {
String userDirectory = Paths.get("")
.toAbsolutePath()
.toString();
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
Здесь Paths#get внутренне использует FileSystem#getPath для выборки путь. Он использует новый Java NIO API, поэтому это решение работает только с JDK 7 или выше.
6. Заключение
В этом руководстве мы рассмотрели четыре различных способа получить текущий рабочий каталог в Java. Первые два решения работают со всеми версиями JDK, тогда как последние два работают только с JDK 7 или выше.
Мы рекомендуем использовать системное решение, поскольку оно эффективно и прямолинейно. Мы можем упростить его, заключив этот вызов API в статический служебный метод и получив к нему прямой доступ.
Исходный код этого руководства доступен на GitHub — это проект на основе Maven, поэтому его легко импортировать и запускать как есть.