avatar

一条在知识海洋的咸鱼

这个家伙很懒,啥也没有留下😋

  • 首页
  • Linux
  • OCJP
  • Java核心技术卷
  • J2EE相关标准
  • 深入理解Java虚拟机
  • NIO与SOcket编程技术指南
  • Java多线程编程核心技术
  • Redis开发与运维
  • Spring Cloud Alibaba 微服务原理与实践
  • DevOps
  • Docker
  • MySQL必知必会
  • AI自学路线
  • Spring Boot 编程思想(核心篇)
主页 第二十五章 Files和Streams
文章

第二十五章 Files和Streams

发表于 2021-05-24 更新于 2026-06- 10
作者 Administrator
10~13 分钟 阅读

在 NIO.2 中使用Stream APi

  • NIO.2中的新Stream方法
  • Files.list()
  • Files.walk()
  • Files.find()
  • Files.lines ()
    • Stream lines()
  • 总结

NIO.2中的新Stream方法

java.nio.file.Files 添加了返回 Stream(注意是Stream流) 接口实现的操作

static Stream<Path> find(Path start,
            int maxDepth,
            BiPredicate<Path,
                BasicFileAttributes> matcher,
            FileVisitOption... options)

static Stream<Path> list(Path dir)

static Stream<String> lines(Path path)
static Stream<String> lines(Path path, Charset cs)

static Stream<Path> walk(Path start,
                         FileVisitOption... options)
static Stream<Path> walk(Path start,
                         int maxDepth,
                         FileVisitOption... options)

返回的Stream是 LAZY 的,这意味着在使用这些元素之前不会加载(或读取)它们。这是一个很好的性能增强。

Files.list()

遍历一个目录以返回一个Stream,该Stream的元素是表示该目录条目的 Path 对象

static Stream<Path> list(Path dir)
            throws IOException
  • 如果参数不表示目录,则引发异常
  • 此方法是线程安全的,但是一致性较弱,这意味着在迭代一个目录时,对该目录的更新可能会反映在返回的流中,也可能不会反映在返回的流中

Files.walk()

遍历一个目录以返回一个流,该流的元素是表示该目录条目的 Path 对象(递归地遍历子目录)

static Stream<Path> walk(Path start,
                         FileVisitOption... options)
            throws IOException
static Stream<Path> walk(Path start,
                         int maxDepth,
                         FileVisitOption... options)
            throws IOException
  • 它采用了深度优先的策略,即在探索另一个目录之前,将目录结构从根目录遍历到子目录的所有方式。
  • 与 Files.list ()一样,建议使用带有 try-with-resources 的 Files.walk () ,如果参数不表示目录,则抛出异常,并将其视为弱一致的方法。

Files.find()

类似于 file.walk () ,但接受一个类型为 BiPredicate 的附加参数,该参数用于筛选文件和目录

static Stream<Path> find(Path start,
        int maxDepth,
        BiPredicate<Path,BasicFileAttributes> matcher,
        FileVisitOption... options)
    throws IOException

image.png

Files.lines ()

将文件的所有行作为字符串流读取

static Stream<String> lines(Path path, Charset cs)
        throws IOException
static Stream<String> lines(Path path)
        throws IOException

Stream lines()

惰性的,其元素是从 BufferedReader 中读取的行

总结

  • 在Java8中,返回流接口实现的新方法被添加到Java.nio.file.Files中。
  • 返回的流是惰性的,这意味着元素在被使用之前不会被加载(或读取)。
  • 建议对这些方法使用try with resources,以便可以调用流的close方法来关闭文件系统资源。
  • list()遍历一个目录以返回一个流,该流的元素是表示该目录项的路径对象。此方法列出指定目录的目录和文件。但是,它不是递归的,换句话说,它不遍历子目录。
  • walk()还以深度优先策略对目录进行迭代,以返回一个流,该流的元素是表示该目录项的路径对象。与Files.list()的区别在于Files.walk()会递归遍历子目录。还可以传递最大遍历深度和跟随符号链接的选项。
  • Files.find()与Files.walk()类似,但它采用了另一个BiPredicate<Path,BasicFileAttributes>类型的参数,用于过滤文件和目录。
  • Files.lines()以字符串流的形式读取文件中的所有行,而不将它们全部加载到内存中。
OCJP
许可协议: 
分享

相关文章

9月 6, 2021

关于这篇OCP-Java专题说明

5月 28, 2021

三十章 本地化

通过使用 Locale 对象读取和设置 Locale。创建并读取属性文件。为每个区域设置构建资源包,并在应用程序中加载资源包。本地化设置语言环境本地化设计一个能够处理不同语言和地区的应用程序。最常见的是消息、日期和数字。java.util.LocaleLocale类基本上代表一种语言和一个国家获得机

5月 27, 2021

第二十九章 JDBC API

了解JDBC API 核心的接口,包括 Driver、 Connection、 Statement 和 ResultSet 接口及其与提供者实现的关系。使用 DriverManager 类(包括 JDBC URL)标识连接到数据库所需的组件。从数据库提交查询和读取结果,包括创建语句、返回结果集、遍历

下一篇

第二十六章 线程基础

上一篇

第二十四章 NIO.2 API

最近更新

  • 55 异常兜底:工具失败、非法输出、空检索与超时
  • 54 Agent Memory:短期记忆、用户上下文与摘要
  • 53 Human-in-the-loop:让关键动作暂停、确认与恢复
  • 52 工单 Tool:字段校验、创建结果与失败补偿
  • 51 订单 Tool:Mock、鉴权、状态解析与脱敏

热门标签

java基础 微服务 maven Spring Tomcat DDD Linux Linux基础 SQL基础 数据结构算法

目录

©2026 一条在知识海洋的咸鱼. 保留部分权利。

使用 Halo 主题 Chirpy