T -由迭代器返回的元素的类型
public interface DirectoryStream<T> extends Closeable, Iterable<T>
而DirectoryStream Iterable延伸,它不是一个通用的Iterable它只支持一个单一的Iterator;调用iterator法获得后续投入IllegalStateException迭代器。
目录的Iterator流的一个重要特性是它的hasNext方法保证至少有一个元素前面读。如果hasNext方法返回true,其次是打电话到next方法,保证了next方法不会把由于I/O错误异常,或由于流已closed。的Iterator不支持remove操作。
一个DirectoryStream打开在创造和被调用close方法封闭。关闭一个目录流释放与流关联的任何资源。未能关闭流可能会导致资源泄漏。与资源语句的尝试提供了一个有用的结构,以确保流被关闭:
路径目录=…尝试(directorystream
<路径>
流=文件。newdirectorystream(DIR)){用于(路径输入:流)…}}
路径>
一旦一个目录流关闭,然后再进入目录,使用Iterator,表现为如果已到达流的末尾。由于提前读,的Iterator可能返回一个或多个元素后的目录流已经关闭。一旦这些缓冲元件已被读取,然后随后调用的方法返回false hasNext,并随后调用的方法将NoSuchElementException next。
目录流不需要异步闭合。如果一个线程在从目录读取迭代器目录流的,而另一个线程调用close方法,第二线程阻塞直到读操作完成。
如果I/O错误是遇到访问目录时,进而导致Iterator的hasNext或next方法把DirectoryIteratorException与IOException的原因。如上所述,该hasNext方法保证至少有一个元素前面读。这意味着,如果hasNext方法返回true,其次是打电话到next方法,则是保证next方法不会失败的一个DirectoryIteratorException。
迭代器返回的元素在没有特定的顺序。一些文件系统保持与目录本身和目录的父目录的特殊链接。表示这些链接的条目不是由迭代器返回的。
迭代器是弱一致的。它是线程安全但不冻的目录在迭代时,那么它可能(或不可能)反映在DirectoryStream创建发生的目录更新。
使用的例子:假设我们想列出一个目录中的源文件。此示例使用两个为每个和尝试与资源结构。
列表
<路径>
listsourcefiles(路径目录)抛出IOException {列表
<路径>
结果=新的ArrayList <>();尝试(directorystream
<路径>
流=文件。newdirectorystream(dir”*。{ C、H、CPP、HPP、java }”)){用于(路径输入:流)添加(条目);}} catch(directoryiteratorexception EX){/ / I / O误在迭代过程中,原因是一个IOException丢出getcause();}返回结果;}
路径>
路径>
路径>
Files.newDirectoryStream(Path)
| Modifier and Type | Interface and Description |
|---|---|
static interface |
DirectoryStream.Filter<T>
由对象来实现的一个接口,该接口决定是否要接受或过滤目录条目。
|
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.