在 Java 中,文件重命名可以通过传统的 java.io.File 类或 NIO 的 java.nio.file.Files 类实现。两者各有特点,以下是具体方法和示例:

1. 使用 java.io.File 类的 renameTo() 方法

File 类的 renameTo() 方法是最基础的重命名方式,适用于简单场景。

语法

boolean renameTo(File dest)

  • 返回值:true 表示重命名成功,false 表示失败(无异常抛出,需手动判断)。
  • 注意:跨文件系统(如从 C 盘到 D 盘)重命名可能失败,且不同操作系统行为可能不一致。

示例

import java.io.File;

public class FileRenameExample {
    public static void main(String[] args) {
        // 源文件路径
        File sourceFile = new File("oldname.txt");
        // 目标文件路径(新名称)
        File targetFile = new File("newname.txt");

        // 执行重命名
        boolean isRenamed = sourceFile.renameTo(targetFile);

        if (isRenamed) {
            System.out.println("文件重命名成功!");
        } else {
            System.out.println("文件重命名失败!可能原因:文件不存在、权限不足或跨文件系统");
        }
    }
}

2. 使用 NIO 的 Files.move() 方法(推荐)

Java 7 引入的 java.nio.file.Files 类提供了更强大的 move() 方法,支持跨文件系统操作,且会抛出异常明确失败原因,推荐优先使用。

语法

static Path move(Path source, Path target, CopyOption... options) throws IOException

  • 参数:
    • source:源文件路径(Path 对象)。
    • target:目标文件路径(新名称)。
    • options:可选参数(如 StandardCopyOption.REPLACE_EXISTING 表示覆盖已存在的目标文件)。
  • 异常:失败时抛出 IOException,可捕获并处理具体原因。

示例

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.io.IOException;

public class FileRenameWithNIO {
    public static void main(String[] args) {
        // 源文件和目标文件的路径
        Path sourcePath = Paths.get("old_file.txt");
        Path targetPath = Paths.get("new_file.txt");

        try {
            // 执行重命名(若目标文件存在则覆盖)
            Files.move(
                sourcePath,
                targetPath,
                StandardCopyOption.REPLACE_EXISTING  // 覆盖已存在的目标文件
            );
            System.out.println("文件重命名成功!");
        } catch (IOException e) {
            System.err.println("文件重命名失败:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

关键说明

  1. 跨目录重命名:两种方法都支持将文件重命名并移动到其他目录,只需在目标路径中指定新目录即可。例如:

    java

    // 将文件从当前目录移动到"docs"目录并改名
    Path source = Paths.get("test.txt");
    Path target = Paths.get("docs/new_test.txt");
    Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
    
  2. 处理目标文件已存在的情况

    • renameTo():若目标文件已存在,重命名会失败(返回 false)。
    • Files.move():需显式指定 StandardCopyOption.REPLACE_EXISTING 才会覆盖目标文件,否则抛出 FileAlreadyExistsException
  3. 权限与异常

    • 重命名需要源文件的读权限和目标目录的写权限。
    • Files.move() 会抛出详细异常(如 NoSuchFileExceptionPermissionDeniedException),便于排查问题,而 renameTo() 仅返回 false,难以定位原因。

推荐用法

  • 简单场景且确认在同一文件系统下,可使用 File.renameTo()
  • 复杂场景(跨目录、跨文件系统、需要异常处理或覆盖目标文件),优先使用 Files.move(),它更可靠且功能更完善。

转自:Java 文件如何重命名 - 豆包

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐