文件的最后修改时间只有在文件关闭时才会更改。
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()?