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 .