Spec-Zone .ru
спецификации, руководства, описания, API
|
T
- Тип элемента возвратился iteratorpublic interface DirectoryStream<T> extends Closeable, Iterable<T>
В то время как DirectoryStream
расширяется Iterable
, это не общего назначения Iterable
поскольку это поддерживает только сингл Iterator
; вызов iterator
метод, чтобы получить второй или последующий iterator броски IllegalStateException
.
Важное свойство потока каталога Iterator
это hasNext
метод, как гарантируют, будет читать вперед по крайней мере одним элементом. Если hasNext
возвраты метода true
, и сопровождается звонком next
метод, гарантируется что next
метод не будет выдавать исключение из-за ошибки ввода-вывода, или потому что поток был closed
. Iterator
не поддерживает remove
работа.
A DirectoryStream
открывается после создания и закрывается, вызывая close
метод. Закрытие потока каталога высвобождает любые средства, связанные с потоком. Отказ закрыть поток может привести к утечке ресурсов. Оператор попытки с ресурсами обеспечивает полезную конструкцию, чтобы гарантировать, что поток закрывается:
Path dir = ... try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) { for (Path entry: stream) { ... } }
Как только поток каталога закрывается, тогда дальнейший доступ к каталогу, используя Iterator
, ведет себя, как будто конец потока был достигнут. Должный читать вперед, Iterator
может возвратить один или более элементов после того, как поток каталога был закрыт. Как только эти буферизованные элементы были считаны, тогда последующие звонки hasNext
возвраты метода false
, и последующие звонки next
метод бросит NoSuchElementException
.
Поток каталога не обязан быть асинхронно closeable. Если поток блокируется на потоковом iterator каталога, читающем из каталога, и другой поток вызывает close
метод, тогда второй поток может блокировать, пока операция чтения не полна.
Если с ошибкой ввода-вывода встречаются, получая доступ к каталогу тогда, это вызывает Iterator
's hasNext
или next
методы, чтобы бросить DirectoryIteratorException
с IOException
как причина. Как указано выше, hasNext
метод, как гарантируют, будет читать вперед по крайней мере одним элементом. Это означает это если hasNext
возвраты метода true
, и сопровождается звонком next
метод, тогда гарантируется что next
метод не перестанет работать с a DirectoryIteratorException
.
Элементы, возвращенные iterator, не находятся ни в каком определенном порядке. Некоторые файловые системы поддерживают особые связи к каталогу непосредственно и родительскому каталогу каталога. Записи, представляющие эти ссылки, не возвращаются iterator.
iterator является слабо непротиворечивым. Это ориентировано на многопотоковое исполнение, но не замораживает каталог, выполняя итерации, таким образом, это может (или не может) отражать обновления к каталогу, которые происходят после DirectoryStream
создается.
Примеры использования: Предположите, что мы хотим список исходных файлов в каталоге. Этот пример использует и для - каждый и конструкции попытки с ресурсами.
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 encounted during the iteration, the cause is an IOException throw ex.getCause(); } return result; }
Files.newDirectoryStream(Path)
Модификатор и Тип | Интерфейс и Описание |
---|---|
static interface |
DirectoryStream.Filter<T>
Интерфейс, который реализуется объектами, которые решают, должна ли запись каталога быть принята или фильтроваться.
|
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.