Java 7 的 Files 工具类简化文件操作:copy() 支持复制与递归复制(需配合 walk()),delete() 要求路径存在,deleteIfExists() 静默处理;递归删除需逆序遍历;辅以路径检查、权限设置及分类异常处理。

Java 7 引入的 Files 工具类(位于 java.nio.file 包)大幅简化了文件和目录的常见操作。相比传统的 File 类,它基于 NIO.2,支持更精确的异常控制、原子性操作、符号链接处理,并且方法设计更直观、语义更清晰。
复制文件或目录:用 copy() 一行搞定
Files.copy() 支持文件复制、目录递归复制(需配合 Files.walk()),并能自动创建父目录、覆盖已有文件、保留属性等。
- 基本文件复制(目标路径不存在时会抛出异常):
Files.copy(sourcePath, targetPath); - 自动创建父目录 + 覆盖已存在文件:
Files.copy(sourcePath, targetPath, StandardCopyOption.CREATE_PARENTS, StandardCopyOption.REPLACE_EXISTING); - 复制目录(需手动遍历):
使用Files.walk()遍历源目录,计算相对路径后逐个复制(Files.copy()本身不直接支持整个目录递归复制)。
安全删除:delete() 和 deleteIfExists() 的区别
Files.delete() 要求目标必须存在,否则抛出 NoSuchFileException;而 Files.deleteIfExists() 更温和——存在就删,不存在也不报错,适合清理型逻辑。
- 强制删除(建议配合 try-catch):
Files.delete(path); // 若 path 不存在或为非空目录,抛异常 - 静默删除(推荐用于临时文件、可选资源):
Files.deleteIfExists(path); - 递归删除非空目录:
先用Files.walk(path).sorted(Comparator.reverseOrder()).forEach(Files::deleteIfExists);
注意:需按逆序遍历(先删子项再删父目录),否则会因目录非空而失败。
常用辅助技巧:路径检查与权限控制
操作前做轻量检查,能避免多数运行时异常:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 判断是否为普通文件:
Files.isRegularFile(path) - 判断是否为目录:
Files.isDirectory(path) - 判断是否可读/可写:
Files.isReadable(path)、Files.isWritable(path) - 设置权限(Linux/macOS):
Files.setPosixFilePermissions(path, EnumSet.of(OWNER_READ, OWNER_WRITE))
异常处理要点:别忽略 FileSystemException 和 IOException
Files 方法统一抛出 IOException 及其子类(如 AccessDeniedException、DirectoryNotEmptyException)。实际开发中应区分处理:
- 对
AccessDeniedException,提示权限不足而非堆栈; - 对
DirectoryNotEmptyException,说明需先清空目录; - 捕获通用
IOException作为兜底,记录原始错误信息。
Files 类的设计目标就是让常见操作“一次调用、语义明确、异常可控”。只要注意路径合法性、权限前提和目录非空限制,大部分复制与删除逻辑几行代码就能稳健完成。

















