files类是java nio中文件操作的首选,提供copy、move、delete等安全方法,支持符号链接、原子操作及多种选项;复制需手动遍历目录,删除非空目录须逆序遍历。

Java 的 Files 类(位于 java.nio.file 包)提供了简洁、安全、面向路径的操作方式,比传统 File 类更现代、更强大。它内置异常处理、支持符号链接、原子操作和各种选项控制,是日常文件操作的首选。
快速复制文件或目录
使用 Files.copy() 方法,支持单个文件复制,也支持递归复制整个目录(需手动遍历)。关键在于传入合适的 CopyOption:
-
StandardCopyOption.REPLACE_EXISTING:目标已存在时覆盖 -
StandardCopyOption.COPY_ATTRIBUTES:尝试复制文件属性(如最后修改时间) -
LinkOption.NOFOLLOW_LINKS:不跟随符号链接(复制链接本身)
示例(复制文件):
Path source = Paths.get("a.txt");
Path target = Paths.get("b.txt");
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
复制整个目录需配合 Files.walk() 或递归逻辑(Files.copy() 本身不自动递归目录)。
安全移动/重命名文件或目录
用 Files.move(),语义上等同于“剪切粘贴”或重命名。默认行为是原子性移动(同一文件系统下为 rename 系统调用),跨文件系统则退化为“复制+删除”。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
StandardCopyOption.REPLACE_EXISTING:覆盖目标(若存在) -
StandardCopyOption.ATOMIC_MOVE:强制要求原子移动(失败会抛AtomicMoveNotSupportedException)
示例(重命名):
Files.move(Paths.get("old.txt"), Paths.get("new.txt"),
StandardCopyOption.REPLACE_EXISTING);
可靠删除文件或空目录
Files.delete() 删除单个文件或空目录;若目录非空,会抛 DirectoryNotEmptyException。
要彻底删除非空目录(含所有子项),推荐组合使用 Files.walk() + Files.delete(),按逆序(从叶子到根)删除最安全:
Path dir = Paths.get("my-folder");
Files.walk(dir)
.sorted(Comparator.reverseOrder())
.forEach(path -> {
try { Files.delete(path); }
catch (IOException e) { throw new UncheckedIOException(e); }
});
注意:该方式不支持中断或回滚,生产环境建议加日志或校验。
小技巧与注意事项
- 所有方法都可能抛
IOException(如权限不足、路径不存在),务必捕获或声明 - 路径对象(
Path)推荐用Paths.get(...)创建,避免字符串拼接错误 - 删除前可用
Files.exists(path)判断是否存在,但要注意竞态条件(存在检查后被删) - 移动/复制大文件时无内置进度回调,如需监控,得自行封装流式读写
不复杂但容易忽略:多数操作默认不递归,目录级动作需主动处理遍历逻辑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










