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

Создать каталог в Java

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

1. Обзор

Создать каталог с помощью Java довольно просто. Язык предоставляет нам два метода, позволяющих создать либо один каталог, либо несколько вложенных каталогов — mkdir() и mkdirs() .

В этом уроке мы увидим, как они оба ведут себя.

2. Создайте единый каталог

Начнем с создания одного каталога.

Для наших целей мы будем использовать временный каталог пользователя. Мы можем найти его с помощью System.getProperty("java.io.tmpdir") .

Мы передадим этот путь объекту Java File , который будет представлять наш временный каталог:

private static final File TEMP_DIRECTORY = new File(System.getProperty("java.io.tmpdir"));

Теперь давайте создадим новый каталог внутри него. Мы добьемся этого, вызвав метод File::mkdir для нового объекта File , представляющего каталог для создания:

File newDirectory = new File(TEMP_DIRECTORY, "new_directory");
assertFalse(newDirectory.exists());
assertTrue(newDirectory.mkdir());

Чтобы убедиться, что наш каталог еще не существует, мы сначала использовали метод exists() .

Затем мы вызвали метод mkdir() , который сообщает нам, удалось ли создать каталог или нет. Если бы каталог уже существовал, метод вернул бы false .

Если мы снова сделаем те же вызовы:

assertTrue(newDirectory.exists());
assertFalse(newDirectory.mkdir());

Затем, как мы и ожидали, метод возвращает false при втором вызове.

И метод mkdir() возвращает false не только тогда, когда каталог уже существует, но и в некоторых других ситуациях . Например, может существовать файл с именем каталога, который мы хотим создать. Или у нас может не хватить прав для создания этого каталога.

Имея это в виду, мы должны найти способ убедиться, что наш каталог в конце концов существует, либо мы его создали, либо он уже был там. Для этой цели мы могли бы использовать метод isDirectory () :

newDirectory.mkdir() || newDirectory.isDirectory()

Таким образом, мы удостоверимся, что нужная нам директория есть.

3. Создайте несколько вложенных каталогов

То, что мы видели до сих пор, хорошо работает с одним каталогом, но что произойдет, если мы захотим создать несколько вложенных каталогов?

В следующем примере мы увидим, что File::mkdir для этого не подходит:

File newDirectory = new File(TEMP_DIRECTORY, "new_directory");
File nestedDirectory = new File(newDirectory, "nested_directory");
assertFalse(newDirectory.exists());
assertFalse(nestedDirectory.exists());
assertFalse(nestedDirectory.mkdir());

Поскольку new_directory не существует , mkdir не создает базовый вложенный_каталог .

Однако класс File предоставляет нам другой метод для достижения этой цели — mkdirs() . Этот метод будет вести себя как mkdir() , но также создаст все несуществующие родительские каталоги.

В нашем предыдущем примере это означало бы создание не только вложенного_каталога , но и нового_каталога.

Обратите внимание, что до сих пор мы использовали конструктор File(File, String) , но мы также можем использовать конструктор File(String) и передать полный путь к нашему файлу, используя File.separator , чтобы разделить разные части пути:

File newDirectory = new File(System.getProperty("java.io.tmpdir") + File.separator + "new_directory");
File nestedDirectory = new File(newDirectory, "nested_directory");
assertFalse(newDirectory.exists());
assertFalse(nestedDirectory.exists());
assertTrue(nestedDirectories.mkdirs());

Как мы видим, каталоги созданы, как и ожидалось. Более того, метод возвращает true только в том случае , если создан хотя бы один каталог. Что касается метода mkdir() , то в остальных случаях он вернет false .

Следовательно, это означает, что метод mkdirs() , используемый для каталога, родительские каталоги которого существуют, будет работать так же, как и метод mkdir() .

4. Вывод

В этой статье мы рассмотрели два метода, позволяющих создавать каталоги в Java. Первый, mkdir() , предназначен для создания одного каталога, при условии, что его родители уже существуют. Второй, mkdirs() , может создать каталог, а также его несуществующие родители.

Код этой статьи можно найти на нашем GitHub .