Научитесь создавать новый каталог по указанному пути с помощью классов 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.