Java 文件处理
文件处理是应用程序开发中的一项核心任务。从 Java 7 开始,java.nio.file 包(NIO.2)引入了一套现代、强大且易于使用的 API,用于处理文件和文件系统。本章将重点介绍这个现代 API。
Path 接口
Path 是现代文件 API 的核心,它代表一个文件或目录的路径。Path 对象是不可变的,并且与操作系统无关。
您可以通过 Paths.get() 工厂方法来创建一个 Path 对象。
Files 工具类
java.nio.file.Files 是一个包含大量静态方法的工具类,用于对 Path 表示的文件或目录进行操作。
检查文件/目录
Files.exists(path): 检查文件或目录是否存在。Files.notExists(path): 检查文件或目录是否不存在。Files.isDirectory(path): 检查路径是否为目录。Files.isRegularFile(path): 检查路径是否为普通文件。Files.isReadable(path)/isWritable(path)/isExecutable(path): 检查文件的读、写、执行权限。
创建和删除文件/目录
Files.createFile(path): 创建一个新文件。如果文件已存在,会抛出FileAlreadyExistsException。Files.createDirectory(path): 创建一个新目录。Files.createDirectories(path): 创建一个目录,包括所有不存在的父目录。Files.delete(path): 删除一个文件或空目录。如果不存在,会抛出NoSuchFileException。Files.deleteIfExists(path): 删除一个文件或目录,如果不存在也不会报错。
读写文件
Files 类提供了一些非常便捷的方法来读写文件,特别适合处理小文件。
Files.writeString(path, content, options...)(Java 11+): 将字符串写入文件。如果文件不存在,会创建它;如果存在,会覆盖内容。Files.readString(path)(Java 11+): 从文件中读取所有内容并返回一个字符串。Files.write(path, bytes): 将字节数组写入文件。Files.readAllBytes(path): 从文件中读取所有字节。Files.write(path, lines): 将一个字符串集合(行)写入文件。Files.readAllLines(path): 从文件中读取所有行到一个List<String>。
示例 (Java 11+):
复制和移动文件
Files.copy(source, target, options...): 复制文件或目录。Files.move(source, target, options...): 移动或重命名文件或目录。
常用的 StandardCopyOption 包括:
REPLACE_EXISTING: 如果目标文件已存在,则替换它。ATOMIC_MOVE: 保证移动操作是原子性的。
对于大文件或需要更精细控制的场景,可以使用 BufferedReader, BufferedWriter 或流式 API,它们可以与 Files.newBufferedReader(path) 和 Files.newBufferedWriter(path) 结合使用。