NIO.2 API 是对 Java I/O 功能的一次重大升级,它传统 java.io.File API(我们称之为 "BIO" 或 "Old I/O")有很大不同。
简单来说,NIO.2 是 Java 7 中引入的一套全新的、现代化的文件系统操作 API。
它的核心在于 java.nio.file 包,旨在彻底取代老旧且设计笨拙的 java.io.File 类。
java.io.File 类长久以来的所有痛点。java.io.File 的什么痛点?java.io.File 类有很多问题:
copydTir)。delete(), mkdir())只返回 true 或 false,你根本不知道为什么失败(是权限不够?还是文件不存在?)。File 类既代表文件也代表目录,有时甚至只是一个抽象路径,职责混乱。NIO.2 引入了几个关键的类和接口来解决上述问题:
Path 接口 (替换 File 类)
Files 工具类 (核心功能)
Files.createFile(path), Files.createDirectory(path), Files.createDirectories(path) (会自动创建所有父目录,非常好用!)Files.copy(sourcePath, destPath, options...) (一行代码搞定文件拷贝,甚至可以用来拷贝文件夹)。Files.move(sourcePath, destPath, options...)Files.delete(path), Files.deleteIfExists(path)Files.readAllBytes(path), Files.readAllLines(path), Files.write(path, bytes) (非常适合读写小文件)。Files.walk(path) 和 Files.walkFileTree(path)。这是递归拷贝文件夹的终极替代品。它能以“流 (Stream)”的方式高效遍历整个目录树。Files.getAttribute(path, "size"), Files.setPosixFilePermissions(path, perms) (可以获取和设置文件大小、创建时间、权限等详细信息)。FileSystems 和 FileSystem (更灵活)
FileSystems.getDefault()(即你电脑的C盘、D盘或macOS/Linux的根目录)。使用 NIO.2,你图中的 30 多行递归代码可以被极大地简化。