Java
7的
java.nio.file软件包可用于增强性能。
迭代器
该
DirectoryStream<T>接口可用于遍历目录,而无需将其内容预加载到内存中。当旧的API在文件夹中创建一个包含所有文件名的数组时,新方法将在迭代过程中遇到每个文件名(或缓存文件名的有限大小组)时加载它。
要获取表示给定实例的实例
Path,
Files.newDirectoryStream(Path)可以调用static方法。我建议您使用try-with-
resources语句正确关闭流,但是如果不能关闭,请记住在末尾手动进行操作
DirectoryStream<T>.close()。
Path folder = Paths.get("...");try (DirectoryStream<Path> stream = Files.newDirectoryStream(folder)) { for (Path entry : stream) { // Process the entry }} catch (IOException ex) { // An I/O problem has occurred}筛选器
该
DirectoryStream.Filter<T>界面可用于在迭代过程中跳过条目组。
由于它是a
@FunctionalInterface,从Java
8开始,您可以使用lambda表达式来实现它,从而覆盖
Filter<T>.accept(T)决定应接受还是过滤给定目录条目的方法。然后,将
Files.newDirectoryStream(Path,DirectoryStream.Filter<? superPath>)静态方法与新创建的实例一起使用。或者,您可能更喜欢使用
Files.newDirectoryStream(Path,String)静态方法,该方法可用于简单的文件名匹配。
Path folder = Paths.get("...");try (DirectoryStream<Path> stream = Files.newDirectoryStream(folder, "*.txt")) { for (Path entry : stream) { // The entry can only be a text file }} catch (IOException ex) { // An I/O problem has occurred}Path folder = Paths.get("...");try (DirectoryStream<Path> stream = Files.newDirectoryStream(folder, entry -> Files.isDirectory(entry))) { for (Path entry : stream) { // The entry can only be a directory }} catch (IOException ex) { // An I/O problem has occurred}


