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