首页 > 解决方案 > 重命名包含 Java 内容的目录的最简单方法是什么?

问题描述

FilerenameTo方法仅在目录为空时有效。除了创建一个新目录并将旧目录的内容复制到其中之外,最简单的方法是什么?

标签: java

解决方案


FilerenameTo方法仅在目录为空时有效。

那是不正确的。

证明

new File("x").mkdir();
new File("x\\file.txt").createNewFile();
new File("x").renameTo(new File("y"));
System.out.println(Arrays.toString(new File(".").list()));
System.out.println(Arrays.toString(new File("y").list()));
new File("y\\file.txt").delete();
new File("y").delete();

输出(在 Windows 上运行)

[.classpath, .project, .settings, lib, pom.xml, src, target, y]
[file.txt]

可以看出,该文件夹x已重命名为y,即使其中有一个名为的文件file.txt


更新

但是,您应该使用较新的Files.move(Paths.get("x"), Paths.get("y"))而不是new File("x").renameTo(new File("y")).

renameTofalse在失败时返回的 不同,该Files.move方法将抛出异常来解释失败的原因。

由于您可能甚至没有检查renameTo(如上面的代码没有)的返回值,因此新方法有助于防止静默忽略失败。


推荐阅读