重命名具有Java内容的目录的最简单方法是什么?

hey*_*you -7 java

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

And*_*eas 5

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();
Run Code Online (Sandbox Code Playgroud)

输出(在Windows上运行)

[.classpath, .project, .settings, lib, pom.xml, src, target, y]
[file.txt]
Run Code Online (Sandbox Code Playgroud)

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


更新

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

renameTo只会false在失败时返回的Files.move方法不同,该方法将引发异常以说明失败原因。

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

  • 我确认了这个答案。它对我也很好。@hey_you,如果这对您不起作用,则说明您的系统存在问题或发生了更多事情,您没有告诉我们。 (2认同)