Spec-Zone.ru › OpenJDK 27

Интерфейс DirectoryStream<T>

Параметры типа:
T — тип элемента, возвращаемого итератором
Все супертипы:
AutoCloseable, Closeable, Iterable<T>
Все известные подтипы:
SecureDirectoryStream<T>
public interface DirectoryStream<T> extends Closeable, Iterable<T>
Объект для перебора элементов каталога. Поток каталога позволяет удобно использовать конструкцию for-each для перебора элементов каталога.

Хотя DirectoryStream расширяет Iterable, это не универсальный Iterable, поскольку он поддерживает только один Iterator; вызов метода iterator для получения второго или последующего итератора приводит к выбросу IllegalStateException.

Важное свойство Iterator потока каталога заключается в том, что метод hasNext гарантированно выполняет предварительное чтение как минимум одного элемента. Если метод hasNext возвращает true, а затем вызывается метод next, гарантируется, что метод next не выбросит исключение из-за ошибки ввода-вывода или потому, что поток был closed. Iterator не поддерживает операцию remove.

DirectoryStream открывается при создании и закрывается вызовом метода close. Закрытие потока каталога освобождает все связанные с ним ресурсы. Если поток не закрыть, это может привести к утечке ресурсов. Инструкция try-with-resources — удобный способ гарантировать закрытие потока:

    Path dir = ...
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
        for (Path entry: stream) {
            ...
        }
    }

После закрытия потока каталога дальнейший доступ к каталогу с помощью Iterator ведет себя так, как если бы был достигнут конец потока. Благодаря предварительному чтению Iterator может вернуть один или несколько элементов после закрытия потока каталога. После чтения этих буферизованных элементов последующие вызовы метода hasNext возвращают false, а последующие вызовы метода next выбрасывают NoSuchElementException.

Поток каталога не обязан поддерживать асинхронное закрытие. Если поток заблокирован на чтении каталога итератором, а другой поток вызывает метод close, второй поток может быть заблокирован до завершения операции чтения.

Если при обращении к каталогу возникает ошибка ввода-вывода, она приводит к тому, что методы hasNext или next объекта Iterator выбрасывают DirectoryIteratorException, причиной которого является IOException. Как указано выше, метод hasNext гарантированно выполняет предварительное чтение как минимум одного элемента. Это означает, что если метод hasNext возвращает true, а затем вызывается метод next, гарантируется, что метод next не завершится ошибкой DirectoryIteratorException.

Элементы, возвращаемые итератором, не имеют определенного порядка. Некоторые файловые системы поддерживают специальные ссылки на сам каталог и его родительский каталог. Элементы, представляющие эти ссылки, итератором не возвращаются.

Итератор является слабо согласованным. Он потокобезопасен, но не блокирует каталог на время перебора, поэтому может (но не обязан) отражать изменения каталога, произошедшие после создания DirectoryStream.

Примеры использования: Предположим, что нам нужен список исходных файлов в каталоге. В этом примере используются конструкции for-each и try-with-resources.

    List<Path> listSourceFiles(Path dir) throws IOException {
        List<Path> result = new ArrayList<>();
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.{c,h,cpp,hpp,java}")) {
            for (Path entry: stream) {
                result.add(entry);
            }
        } catch (DirectoryIteratorException ex) {
            // I/O error encountered during the iteration, the cause is an IOException
            throw ex.getCause();
        }
        return result;
    }
С версии:
1.7
См. также:
  • Files.newDirectoryStream(Path)

Краткое описание вложенных классов

Модификатор и тип Интерфейс Описание
static interface  DirectoryStream.Filter<T>
Интерфейс, реализуемый объектами, которые определяют, следует ли принять или отфильтровать элемент каталога.

Краткое описание методов

Модификатор и тип Метод Описание
Iterator<T> iterator()
Возвращает итератор, связанный с этим DirectoryStream.

Методы, объявленные в интерфейсе Closeable

close
Модификатор и тип Метод Описание
void close()
Закрывает этот поток и освобождает все связанные с ним системные ресурсы.

Методы, объявленные в интерфейсе Iterable

forEach, spliterator
Модификатор и тип Метод Описание
default void forEach(Consumer<? super T> action)
Выполняет указанное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение.
default Spliterator<T> spliterator()
Создает Spliterator для элементов, описанных этим Iterable.

Подробное описание методов

iterator

Iterator<T> iterator()
Возвращает итератор, связанный с этим DirectoryStream.
Определен в:
iterator в интерфейсе Iterable<T>
Возвращает:
итератор, связанный с этим DirectoryStream
Выбрасывает:
IllegalStateException — если этот поток каталога закрыт или итератор уже был возвращен

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API