Рубрики
Без рубрики

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

Изучите различные способы извлечения текущего рабочего каталога на Java.

Автор оригинала: baeldung.

1. Обзор

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

В этом уроке мы узнаем, как получить текущий рабочий каталог на Java с помощью java.lang. Система , java.io.Файл, java.nio.файл.Файловые системы, и java.nio.файл.Пути .

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 для извлечения текущего рабочего каталога из карты свойств System . Это решение работает во всех версиях JDK.

3. Файл

Давайте рассмотрим другое решение с использованием java.io.Файл :

@Test
void whenUsingJavaIoFile_thenReturnCurrentDirectory() {
    String userDirectory = new File("").getAbsolutePath();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

Здесь Файл#getAbsolutePath внутренне использует System#getProperty для получения имени каталога, аналогичного нашему первому решению. Это нестандартное решение для получения текущего рабочего каталога, и оно работает во всех версиях JDK.

4. Файловые системы

Другой допустимой альтернативой было бы использование нового файла java.nio..Файловые системы API:

@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.Пути API:

@Test
void whenUsingJavaNioPaths_thenReturnCurrentDirectory() {
    String userDirectory = Paths.get("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

Здесь Пути#get внутренне использует файловую систему#getPath для извлечения пути. Он использует новый Java NIO API , поэтому это решение работает только с JDK 7 или выше .

6. Заключение

В этом уроке мы рассмотрели четыре различных способа получения текущего рабочего каталога на Java. Первые два решения работают во всех версиях JDK, в то время как последние два работают только с JDK 7 или выше.

Мы рекомендуем использовать решение System , поскольку оно эффективно и просто, мы можем упростить его, заключив этот вызов API в метод статической утилиты и получив к нему прямой доступ.

Исходный код этого руководства доступен на GitHub – это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.