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