Вземете текущата работна директория в Java

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, така че трябва да е лесно да се импортира и да се изпълнява както е.