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

Научитесь создавать новый каталог по указанному пути с помощью классов Java IO и NIO. Мы рассмотрим методы, которые могут и не могут создавать родительские каталоги, если они не существуют.

1. Обзор

Мы создадим новый каталог в месте c:/temp/data/archive. Обратите внимание, что data — это родительский каталог archive. Во время выполнения каталог data может не существовать, когда мы пытаемся создать каталог archive.

Научимся создавать архивный каталог таким образом:

  • если каталог данных не существует, то создайте его
  • если каталог данных не существует, то выдать исключение

2. Использование файлов NIO

Класс Files имеет два метода:

2.1.Файлы.createDirectory()

  • Метод createDirectory() создает новый каталог, если все родительские каталоги существуют.
  • Проверка существования файла и создание каталога, если он не существует, представляют собой одну атомарную операцию.
  • Если файл или каталог с похожим именем уже существует по указанному пути, то возникает исключение FileAlreadyExistsException.
  • Если какой-либо из родительских каталогов не существует, выдается исключение IOException.
Path path = Paths.get("c:/temp/data/archive");if(!Files.exists(path)) {Files.createDirectory(path);}

2.2.Файлы.createDirectories()

  • Функция createDirectory() создает новый каталог, сначала создавая все несуществующие родительские каталоги.
  • Он не выдает исключение, если каталог с таким же именем и путем уже существует. В этом случае ничего не происходит.
  • Если файл с таким именем уже существует по указанному пути, то возникает исключение FileAlreadyExistsException.
  • Это не атомарная операция. Поэтому вполне возможно, что эта операция создаст некоторые родительские каталоги, а затем по какой-то причине не завершится.
Path path = Paths.get("c:/temp/data/archive");Files.createDirectories(path);

3. Использование файла ввода-вывода

Класс File также имеет два похожих метода:

3.1.Файл.mkdir()

Метод mkdir() создает новый каталог по указанному пути. Этот метод возвращает true, если и только если каталог был создан; в противном случае возвращается false.

В случае проблемы с разрешением на запись может возникнуть исключение SecurityException.

File newDir = new File("c:/temp/data/archive");if(!newDir.exists()) {boolean isDirectoryCreated = newDir.mkdir();}

В качестве лучшей практики мы всегда должны проверять, существует ли каталог с указанным именем после этой операции. Для этого мы можем снова использовать newDir.exists() после этой операции.

3.2.Файл.mkdirs()

Метод mkdirs() создает каталог с указанным именем, включая все необходимые, но несуществующие родительские каталоги.

  • Подобно createDirectories(), эта операция может завершиться ошибкой после создания некоторых родительских каталогов.
  • Возвращает значение true тогда и только тогда, когда каталог был создан вместе со всеми необходимыми родительскими каталогами; в противном случае возвращает значение false.
File newDir = new File("c:/temp/data/archive");boolean isDirectoryCreated = newDir.mkdirs();

4. Заключение

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

Рекомендуется использовать файлы NIO вместо старого класса файлов IO.

Исходный код на Github

Прокрутить вверх