392. Java 文件操作基础 - 在 Files API 中的可变参数应用

0 阅读2分钟

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 的两种传参方式

  1. 直接传多个参数(最常用 ✅)

    Files.move(source, target, 
               StandardCopyOption.REPLACE_EXISTING, 
               StandardCopyOption.ATOMIC_MOVE);
    
  2. 传数组

    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。