获取文件修改时间

时间:2009-10-05 07:43:14

标签: java

我想编写一个代码来监控文件更改并对更改做出反应。 所以我写了一个TimerTask来定期检查文件的修改 但我有一个问题: 当文件被其他程序打开时,例如excel或word,我正在关闭文件 没有任何更改,值File.lastModified()正在更改。 我也试图通过运行dir shell脚本来获取修改日期,但是工作正常 它只有微小的准确性! 谁能帮我? 感谢

3 个答案:

答案 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环境中获得准确的时间,请查看以下内容:

WinAPI FILETIME structure

  

并非所有文件系统都能记录创建和上次访问时间,并非所有文件系统都以相同方式记录它们。例如,在NT FAT上,创建时间的分辨率为10毫秒,写入时间的分辨率为2秒,访问时间的分辨率为1天(实际上是访问日期)。在NTFS上,访问时间的分辨率为1小时。因此,GetFileTime函数可能不会返回使用SetFileTime函数设置的相同文件时间信息。此外,FAT在本地时间记录磁盘上的时间。但是,NTFS以UTC格式记录磁盘上的时间。有关更多信息,请参阅文件时间。