尝试在重命名后在Java中设置文件的上次修改时间

K M*_*hta 5 java last-modified file-rename

这是我开始使用的代码:

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

我看到的输出是:

renamed: true
time changed: false
Run Code Online (Sandbox Code Playgroud)

但当我尝试时:

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

这个输出似乎工作得很好:

renamed: true
time changed: true
Run Code Online (Sandbox Code Playgroud)

为什么第二种方法有效,第一种方法不适用?

Ale*_*exR 4

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

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

我希望现在一切都清楚了。