第 7 章 文件I/O
J2SE 1.4 引入了 NIO(non-blocking input/output,非阻塞输入 / 输出)包 1,“N”有时也表示“新”(new)。而 Java 7 新增的 NIO.2 是对 NIO 的扩展,它定义了各种用于操作文件和目录的类。NIO.2 包括 java.nio.file 包,本章将对此讨论。Java 8 对其中的一些类(如 java.nio.files.File)进行强化,引入了若干用于处理流的方法。
1大部分 Java 开发人员都惊讶于 NIO 的引入是如此之早。
遗憾的是,函数式编程所倡导的流式隐喻和输入 / 输出的同一术语相互冲突,这可能使用户感到困惑。例如,java.nio.file.DirectoryStream 接口与函数式流(functional stream)无关,该接口由使用传统 for-each 构造对目录树迭代的类来实现 2。
2更令人困惑的是,DirectoryStream.Filter 接口实际上属于函数式接口,尽管它也和函数式流无关。该接口仅用于批准目录树中选定的条目。
这一章将重点讨论支持函数式流的 I/O 功能。Java 8 为 java.nio.file.Files 类引入了若干用于处理函数式流的新方法,这些方法如表 7-1 所示。请注意,Files 类中的所有方法均为静态方法。
表7-1:java.nio.file.Files类定义的返回流的方法
| 方法 | 返回类型 |
|---|---|
lines
|
Stream
|
list
|
Stream
|
walk
|
Stream
|
find
|
Stream
|
这一章的范例将讨论上述方法。
