392. Java 文件操作基础 - 在 Files API 中的可变参数应用
各位同学,我们在使用 Java NIO Files API 时,会经常看到方法签名里有 三个点 ...,比如:
Path Files.move(Path source, Path target, CopyOption... options)
这个 CopyOption... 就是 可变参数(Varargs)。
1️⃣ 什么是 Varargs?
👉 Varargs(Variable Arguments)就是 可变参数,允许方法接收任意数量的同类型参数。
- 语法:
类型... 参数名 - 在方法内部,它其实就是一个数组。
举个简单的例子:
public static void printNames(String... names) {
for (String name : names) {
System.out.println(name);
}
}
printNames("Tom", "Jerry", "Spike");
// 输出三行 Tom, Jerry, Spike
🔎 解读:
String... names等价于String[] names。- 但是调用时更灵活,可以直接写一串参数,而不用自己先 new 一个数组。
2️⃣ Files.move 的 Varargs 用法
在 文件操作中,我们经常需要指定一些“操作选项”。 比如:移动文件时,是否允许覆盖、是否保证原子性。
方法签名:
Path Files.move(Path source, Path target, CopyOption... options)
调用示例 👇
Path source = Paths.get("old.txt");
Path target = Paths.get("new.txt");
Path moved = Files.move(source, target,
StandardCopyOption.REPLACE_EXISTING, // 允许覆盖已存在的目标文件
StandardCopyOption.ATOMIC_MOVE); // 保证移动是原子操作
3️⃣ Varargs 的两种传参方式
-
直接传多个参数(最常用 ✅)
Files.move(source, target, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE); -
传数组
CopyOption[] options = { StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE }; Files.move(source, target, options);
🔎 解读:
- 两种写法效果一样。
- 推荐第一种,更简洁。
4️⃣ 为什么要用 Varargs?🚀
- 简洁:不用自己 new 数组,直接写参数列表即可。
- 灵活:可以传 0 个、1 个、多个参数。
- 常见场景:文件操作选项(Copy、Move)、线程池任务提交、日志方法(logger.info(...))等。
5️⃣ 小练习 🎯
问大家一个问题:
如果我只想 简单移动文件,不加任何选项,应该怎么写?
Files.move(source, target); // ✅ 可变参数可以传 0 个参数
👉 这就是 Varargs 的威力:
- 想加选项时随意加
- 不想加时就直接留空
✅ 总结一句: **Varargs(可变参数)让方法更灵活、更简洁,是 Java API 设计中的常见技巧。**在文件 I/O 里,它让我们可以优雅地传入各种 CopyOption。