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

Создание каталога на Java

Узнайте, как создавать каталоги с различными структурами в Java

Автор оригинала: François Dupire.

1. Обзор

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

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

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

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

Для наших целей мы будем использовать каталог user temp . Мы можем посмотреть его с помощью 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());

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

Затем мы вызвали метод 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 () , но также создаст все несуществующие родительские каталоги.

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

Обратите внимание, что до сих пор мы использовали File(Файл, Строка) конструктор, но мы также можем использовать File(Строка) конструктор и передать полный путь к нашему файлу с помощью 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 .