Java:File #reName()成功重命名该文件,但文件对象仍引用旧名称

时间:2011-05-12 21:03:18

标签: java

我在Java中遇到了一种奇怪的行为

File file = new File("test.txt");
file.reName(new File("test1.txt"));

该文件已成功从test.txt重命名为test1.txt,但如果我这样做

System.out.println(file.getCanonicalPath()); //This return test.txt

这是预期的吗?什么是解决这个问题的简洁方法?

2 个答案:

答案 0 :(得分:4)

是的,这是预料之中的。 File个对象是不可变的,只是表示文件名。

您可以这样想:File对象是对文件的引用,而不是文件本身。

此行为实际上很有用 - 例如,假设您正在移动文件的先前版本以避免覆盖它(即创建备份副本)。如果您将foo1.txt重命名为foo1.bak,则包含File的原始foo1.txt变量仍会包含该变量,并可用于打开FileOutputStream。< / p>

答案 1 :(得分:1)

我相信这是预期的。 File对象是相对于底层文件系统的路径的抽象。它不需要对应于现有文件。 renameTo方法移动基础文件(如果存在且可移动)。但是,这不会更改File对象表示的路径。