Проверка наличия папки в Java 7: обработка исключений IO
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для проверки наличия директории в Java, воспользуйтесь Files.exists()
из пакета java.nio.file.Files
:
boolean exists = Files.exists(Paths.get("/путь/к/директории"));
Затем проверьте, что указанный путь приводит к директории, используя Files.isDirectory()
:
boolean isDirectory = Files.isDirectory(Paths.get("/путь/к/директории"));
Взглянем на символические ссылки
Символические ссылки могут привести вас в неожиданные места. Управляете поведением символических ссылок с помощью LinkOption.NOFOLLOW_LINKS
при вызове Files.exists
:
boolean directoryExists = Files.exists(directoryPath, LinkOption.NOFOLLOW_LINKS);
Парадокс отсутствия директории
Отсутствие директории может быть не сразу очевидно: Files.exists()
вернёт false
, если директория не существует или не может быть достигнута:
boolean directoryDoesNotExist = Files.notExists(directoryPath);
Создать недостающие директории можно с помощью Files.createDirectories()
:
if (Files.notExists(directoryPath)) {
Files.createDirectories(directoryPath);
}
Ознакомимся с итерацией по файлам
Для организации списка файлов в директории используйте DirectoryStream
в сочетании с блоком try-with-resources, чтобы поток закрывался автоматически:
Path dir = Paths.get("/путь/к/директории");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path file : stream) {
// Обработка каждого файла
}
} catch (IOException e) {
// Обработка исключения
}
Добро пожаловать классу File
Класс File
– это хорошо знакомый способ работы с файлами. Используйте exists()
и isDirectory()
для проверки директории:
File directory = new File("/путь/к/директории");
if (directory.exists() && directory.isDirectory()) {
// Директория существует
}
Защита от ошибок и ведение логирования
Качественная обработка ошибок помогает избежать IOExceptions
:
try {
Path directoryPath = Paths.get("/путь/к/директории");
if (!Files.exists(directoryPath)) {
Files.createDirectory(directoryPath);
}
} catch (IOException e) {
// Логирование или обработка исключения
}
Логирование является неотъемлемым шагом, который позволяет регистрировать все важные события:
Path directoryPath = Paths.get("/путь/к/директории");
if (Files.exists(directoryPath)) {
System.out.println("Директория существует: " + directoryPath);
}
Визуализация
Как визуализировать процесс проверки наличия директории? Представьте файловую систему в виде иерархического дерева домиков:
🌳🏠🌳🏡🌳 // Домики на деревьях буду представлять директории.
Таким образом, мы осуществляем поиск:
Path path = Paths.get("/путь/к/домику/на/дереве");
if (Files.exists(path) && Files.isDirectory(path)) {
// 🌳🏡 Директория найдена!
} else {
// 🌳... Директории нет.
}
Теперь вы умеете определять наличие директории с помощью Files.exists()
и Files.isDirectory()
.
Обработка особых случаев
Гарантия доступа на чтение
Для проверки прав на чтение директории используется:
Path directoryPath = Paths.get("/путь/к/директории");
boolean canRead = Files.isReadable(directoryPath);
if (Files.exists(directoryPath) && canRead) {
// Директория доступна для чтения
}
Загадка символических ссылок
Символические ссылки могут указывать на несуществующие объекты:
Path symlinkPath = Paths.get("/путь/к/символической/ссылке");
boolean isSymbolicLink = Files.isSymbolicLink(symlinkPath);
if (isSymbolicLink && Files.exists(Files.readSymbolicLink(symlinkPath))) {
// Ссылка указывает на реальный объект
}
Создание иерархических структур
Создание многоуровневой структуры директорий осуществляется одной командой:
Path directoriesPath = Paths.get("/путь/к/глубокой/структуре/директорий");
Files.createDirectories(directoriesPath);