【问题标题】:Trying to set the last modified time of a file in Java after renaming it重命名文件后尝试在Java中设置文件的最后修改时间
【发布时间】:2011-07-24 08:27:28
【问题描述】:

这是我开始使用的代码:

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

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

【问题讨论】:

    标签: java last-modified file-rename


    【解决方案1】:

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

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

    我希望现在很清楚。

    【讨论】:

    • 明确澄清,谢谢!但是,它看起来确实是一个糟糕的 API 设计!我会假设如果我在文件对象上调用 renameTo,这将是一个实际更改文件的文件名的变异调用,但我猜它不会。
    【解决方案2】:

    oldFile.renameTo(new File("new_name.txt")); 不会改变oldFile 指向的位置。 oldFile 的路径在调用之后仍然是 old_name.txt

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

    【讨论】:

      【解决方案3】:

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

      重命名文件时,不再有原名的文件了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-06
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 2011-12-03
        相关资源
        最近更新 更多