更改文件的上次修改时间而不关闭它



文件的最后修改时间只有在文件关闭时才会更改。

public class Main {
    public static void main(String[] args) throws IOException {
        File f = new File("xyz.txt");
        FileWriter fwr = new FileWriter(f);
        System.out.println(f.lastModified());
        fwr.write("asasdasdasd");
        System.out.println(f.setLastModified(System.currentTimeMillis()));
        fwr.flush();
        System.out.println(f.lastModified());
        fwr.close();
        System.out.println(f.lastModified());
        System.out.println(f.setLastModified(System.currentTimeMillis()));      
    }
}

现在,在我的实际程序中,打开了一个文件,其中一个线程继续写入该文件。其他几个线程需要知道最后一次写入文件的数据是什么时候。

有没有可能在不关闭文件的情况下更新上次修改的文件?(我知道,在写文件的线程中有一个static变量- long lastWriteTime将工作。但只是想知道是否有其他的方法,改变最后修改时间不关闭文件。)

根据您实际想要实现的目标,以下两种方法之一可能是合适的:

  • 使用File.setLastModified()直接操作时间戳或
  • 使用f.flush()确保所有写入的数据都实际写入磁盘。

请注意,操作系统和/或文件系统的时间戳分辨率可能比您希望的要低。例如,FAT以2秒的分辨率存储这些时间戳!甚至更现代的文件系统也只能以一秒的分辨率存储。

还要注意,最后修改的时间戳的行为根据操作系统的不同而变化很大。例如,在我的Ubuntu上,只有write/flush修改时间戳,close() !

请记住,您看到的行为高度依赖于操作系统和文件系统类型。因此,java不能也不会指定何时更新文件时间。因此,没有,在java中没有可移植的方法来实现。

如何使用setLastModified()?

相关内容

  • 没有找到相关文章