Интерфейс DirectoryStream<T>
- Параметры типа:
T- Тип элемента, возвращаемого итератором
- Все суперинтерфейсы:
-
AutoCloseable,Closeable,Iterable<T>
- Все известные подинтерфейсы:
SecureDirectoryStream<T>
public interface DirectoryStream<T> extends Closeable, Iterable<T>
Хотя DirectoryStream расширяет Iterable, он не является универсальным Iterable, так как поддерживает только один
Iterator; вызов метода iterator для получения второго или последующего итератора вызывает IllegalStateException.
Важная особенность потока каталога Iterator заключается в том, что его метод hasNext гарантирует предварительное чтение как минимум одного элемента. Если метод hasNext возвращает true, и за ним следует вызов метода next, то гарантируется, что метод next не выбросит исключение из-за ошибки ввода-вывода или потому, что поток был closed. Поток Iterator не поддерживает операцию remove.
Поток каталога открывается при создании и закрывается путем вызова метода close. Закрытие потока каталога высвобождает все ресурсы, связанные с потоком. Отсутствие закрытия потока может привести к утечке ресурсов. Конструкция try-with-resources предоставляет полезную конструкцию для гарантированного закрытия потока:
Path dir = ...
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path entry: stream) {
...
}
}
После закрытия потока каталога дальнейший доступ к каталогу с использованием Iterator ведет себя так, как будто достигнут конец потока. Из-за предварительного чтения Iterator может вернуть один или несколько элементов после закрытия потока каталога. После чтения этих буферизованных элементов последующие вызовы метода hasNext возвращают false, а последующие вызовы метода next выбросят NoSuchElementException.
Поток каталога не обязан быть асинхронно закрываемым. Если поток заблокирован на чтении из каталога итератором потока каталога, а другой поток вызывает метод close, то второй поток может заблокироваться до завершения операции чтения.
Если при доступе к каталогу возникает ошибка ввода-вывода, то она заставляет методы Iterator или next потока hasNext выбросить 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
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface |
DirectoryStream.Filter<T> |
Интерфейс, реализуемый объектами, определяющими, следует ли принимать или фильтровать запись каталога. |
Краткое описание методов
Методы, объявленные в интерфейсе java.lang.Iterable
forEach, spliterator
Подробное описание методов
iterator
Iterator<T> iterator()
DirectoryStream.- Определено в:
-
iteratorв интерфейсеIterable<T> - Возвращает:
- итератор, связанный с этим
DirectoryStream - Выбрасывает:
-
IllegalStateException- если этот поток каталога закрыт или итератор уже был возвращен
© 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/file/DirectoryStream.html