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.