Перейти к основному содержимому

Получить текущий рабочий каталог в Java

· 2 мин. чтения

1. Обзор

Получить текущий рабочий каталог в Java несложно, но, к сожалению, в JDK нет прямого API для этого.

В этом руководстве мы узнаем, как получить текущий рабочий каталог в Java с помощью java.lang. System , java.io.File, java.nio.file.FileSystems и java.nio.file.Paths .

2. Система

Давайте начнем со стандартного решения, используя System#getProperty , предполагая, что имя нашего текущего рабочего каталога — ForEach во всем коде:

static final String CURRENT_DIR = "ForEach";
@Test
void whenUsingSystemProperties_thenReturnCurrentDirectory() {
String userDirectory = System.getProperty("user.dir");
assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

Мы использовали встроенный в Java ключ свойства user.dir для получения текущего рабочего каталога из карты свойств System . Это решение работает во всех версиях 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. Пути

И, наконец, давайте рассмотрим более простое решение для получения текущего каталога с помощью API java.nio.file.Paths :

@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, поэтому его легко импортировать и запускать как есть.