Как проверить, пуст ли каталог в Java

Научитесь проверять, пуст ли каталог или содержит ли он какие-либо файлы, в Java с помощью API NIO.

1. Использование Files.list()

Files.list(dirPath) возвращает лениво заполненный поток файлов и каталогов(нерекурсивный) по заданному пути. Мы можем использовать метод stream.findAny(), который возвращает пустой Optional, если каталог пуст.

  • Если указанный путь не является каталогом, то выдается исключение NotDirectoryException.
  • Каталог закрывается путем закрытия потока.

Эта операция findAny(), которая замыкает терминальную операцию, может сделать вывод о результате после выбора любого элемента в потоке, поэтому ей не нужно просматривать весь каталог и его файлы перед принятием решения. Это делает этот подход хорошим решением с эффективной производительностью даже для очень больших каталогов.

Path dirPath = Paths.get("C:/temp");boolean isEmptyDirectory = Files.list(dirPath).findAny().isPresent();

2. Использование DirectoryStream

Поток каталогов позволяет удобно использовать конструкцию for-each для итерации по каталогу.

DirectoryStream открывается при создании и закрывается вызовом метода close(). В качестве альтернативы мы должны использовать оператор try-with-resources, который автоматически закрывает поток после использования.

Используя итератор потока каталога, мы можем вызвать его hasNext(), который проверяет, есть ли в потоке какой-либо элемент файла/каталога. Если каталог пуст, то hasNext() вернет false.

Path dirPath = Paths.get("C:/temp");boolean isEmptyDirectory = false;if(Files.isDirectory(dirPath)) {try(DirectoryStream<Path> dirStream =Files.newDirectoryStream(dirPath)) {isEmptyDirectory = !dirStream.iterator().hasNext();}}

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

В этом уроке Java мы изучили несколько проверенных методов проверки того, пуст ли данный каталог или нет. Мы используем ленивое поведение потока для улучшения производительности, которая в противном случае иногда является очень дорогой операцией в случае больших папок.

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

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