我想编写一个代码来监控文件更改并对更改做出反应。 所以我写了一个TimerTask来定期检查文件的修改 但我有一个问题: 当文件被其他程序打开时,例如excel或word,我正在关闭文件 没有任何更改,值File.lastModified()正在更改。 我也试图通过运行dir shell脚本来获取修改日期,但是工作正常 它只有微小的准确性! 谁能帮我? 感谢
答案 0 :(得分:2)
Word和Excel在打开文件时将您的用户名写入文件中(以便其他用户在尝试打开文件时可以看到谁正在使用它)。所以File.lastModified()
正在改变是正确的。
在Windows上,没有命令行工具可以显示修改时间(以秒为单位)。
答案 1 :(得分:2)
我没有在Windows下使用OpenOffice看到您描述的行为。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Scanner;
public class CsvWriter {
public static void main(String args[]) throws IOException {
String fileName = "test.xls";
File file = new File(fileName);
PrintWriter out = new PrintWriter(new FileWriter(file));
out.println("a,b,c,d");
out.println("e,f,g,h");
out.println("i,j,k,l");
out.close();
System.out.println("Before: " + new Date(file.lastModified()));
// manual steps:
// open test.xls with OpenOffice
// close test.xls
// press enter
System.in.read(); // wait until 'enter' is pressed
System.out.println("After: " + new Date(file.lastModified()));
}
}
输出:
Before: Mon Oct 05 10:01:27 CEST 2009
After: Mon Oct 05 10:01:27 CEST 2009
也许你可以发布一些代码来展示你是如何做到的?你在什么平台上运行你的应用程序?
答案 2 :(得分:0)
如果您想在Windows环境中获得准确的时间,请查看以下内容:
并非所有文件系统都能记录创建和上次访问时间,并非所有文件系统都以相同方式记录它们。例如,在NT FAT上,创建时间的分辨率为10毫秒,写入时间的分辨率为2秒,访问时间的分辨率为1天(实际上是访问日期)。在NTFS上,访问时间的分辨率为1小时。因此,GetFileTime函数可能不会返回使用SetFileTime函数设置的相同文件时间信息。此外,FAT在本地时间记录磁盘上的时间。但是,NTFS以UTC格式记录磁盘上的时间。有关更多信息,请参阅文件时间。