5

这是我开始使用的代码:

long modifiedTime = [some time here];
File oldFile = new File("old_name.txt");
boolean renamed = oldFile.renameTo(new File("new_name.txt");
boolean timeChanged = oldFile.setLastModified(modifiedTime);

System.out.println("renamed: " + renamed);
System.out.println("time changed: " + timeChanged);

我看到的输出是:

renamed: true
time changed: false

但是当我尝试时:

long modifiedTime = [some time here];
boolean renamed = new File("old_name.txt").renameTo(new File("new_name.txt"));
boolean timeChanged = new File("new_name.txt").setLastModified(modifiedTime);

System.out.println("renamed: " + renamed);
System.out.println("time changed: " + timeChanged);

它似乎工作正常,有这个输出:

renamed: true
time changed: true

为什么第二种方法有效,而第一种方法无效?

4

3 回答 3

4

在第一种情况下,您试图更改不再存在的文件的最后修改属性!因为你刚刚重命名了它。在第二种情况下,您正在更改现有有效文件的属性。

发生这种情况是因为 java 类 File 是对本机命令的精简包装。如果您创建了 instance old = new File("oldname"),然后rename在 instance 上调用然后调用某个方法,old它实际上执行系统调用并发送文件名和命令。但此时文件名无关紧要。

我希望现在很清楚。

于 2011-07-24T08:36:48.587 回答
2

oldFile.renameTo(new File("new_name.txt"));不改变whereoldFile点。oldFile的路径仍然old_name.txt在那个电话之后。

所以setLastModified调用失败,因为old_name.txt此时不再存在。

于 2011-07-24T08:36:48.357 回答
1

File表示可能存在或不存在的文件或目录的路径。

重命名文件时,不再有具有原始名称的文件。

于 2011-07-24T08:36:36.043 回答