3

我的 windows 目录中有一组文件,这些文件是从其他地方复制的。在检查其中一个文件的属性时(右键单击 -> 属性),它显示:

创建时间:今天,2013 年 2 月 11 日,下午 2:51:56

修改时间:2013 年 1 月 1 日,星期二,上午 8:30:04

访问时间:今天,2013 年 2 月 11 日,下午 2:51:56

“创建”和“访问”字段基本上显示文件实际复制到新目录的时间,而“修改”字段显示原始文件的修改日期。

在 Java 中使用file.lastModified()我得到的是“已访问”(或“已创建”)时间戳。有没有办法获得原始文件的“修改”值?

4

3 回答 3

3

除了在 Java 7 中使用“外部”库(如提到的 JavaXT)外,您还可以使用新的文件 API(查看此Java 7 nio.2 教程)。

File attribFile = new File("/tmp/file.txt");
Path attribPath = attribFile.toPath();
BasicFileAttributeView basicView =
    attribPath.getFileAttributeView(BasicFileAttributeView.class);
BasicFileAttributes basicAttribs = basicView.readAttributes();

System.out.println("Created: " + basicAttribs.creationTime());
System.out.println("Accessed: " + basicAttribs.lastAccessTime());
System.out.println("Modified: " + basicAttribs.lastModifiedTime());

查看这篇文章以获取更多示例。

于 2013-02-11T10:39:31.290 回答
2

您可以添加这个 JavaXT 库,然后您就可以执行以下操作:

javaxt.io.File file = new javaxt.io.File("/tmp/file.txt");
System.out.println("Created: " + file.getCreationTime());
System.out.println("Accessed: " + file.getLastAccessTime());
System.out.println("Modified: " + file.getLastModifiedTime());
于 2013-02-11T10:23:37.850 回答
0

至于 JavaXT 和 Java 7 不适合您,您可以尝试一些更奇特的方法,如果您准备只坚持使用 Windows 平台。就大多数 *nix 文件系统而言,文件创建属性不存在,所以这似乎不是很大的限制。

1)。输出

    Runtime.getRuntime().exec("cmd /c dir c:\\logfile.log /tc");

这里的工作示例

2)。尝试另一个“外部”库。例如文件时间

3)。您可以利用 JNA 直接调用 Windows API 函数。顺便说一句,当我尝试使用 JNA 和文件属性函数找到代码示例时,我发现了这个问题,所以你的问题似乎是重复的 :-)

于 2013-02-11T15:40:18.340 回答