File
的{{1}}方法仅在目录为空时有效。除了建立新目录并将旧目录的内容复制到其中之外,使其最简单的方法是什么?
答案 0 :(得分:5)
File
的{{1}}方法仅在目录为空时有效。
那是不正确。
证明
renameTo
输出(在Windows上运行)
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();
可以看出,文件夹[.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"))
不同,renameTo
在失败时仅返回false
,而Files.move
方法将抛出异常,解释其失败原因。
由于您甚至可能甚至没有检查renameTo
的返回值(就像上面的代码一样),因此新方法有助于防止对失败进行静默忽略。