如何获取文件的正确文件创建日期?

时间:2014-01-10 00:16:15

标签: java file

我不需要上次修改时间而不是上次文件访问时间,而是文件创建时间。我还没有找到有关此信息。也许是一些图书馆?

Path p = Paths.get(f.getAbsoluteFile().toURI());
BasicFileAttributes view = null;
try {
    view = Files.getFileAttributeView(p,
                            BasicFileAttributeView.class).readAttributes();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
FileTime creationTime = view.creationTime();

在此代码创建时间无效并返回今天日期。

操作系统:Windows 7 Java:SE-1.7

3 个答案:

答案 0 :(得分:9)

正如yshavit所说,并非所有操作系统都记录创建的日期。但是,您应该能够使用java.nio.file来确定具有此功能的操作系统上的此信息 - 请参阅files.getAttribute的文档 - 请注意BasicFileAttributeView包含{{1}的字段}}

您可以使用creationTime来确定当前操作系统支持的FileSystems.getDefault();

FileAttributeView将返回一个Files.getAttribute(path, "basic:createdAt");对象,其中包含在支持FileTime的系统上创建文件的日期。您必须将其转换为BasicFileAttributeView对象,但我会让您自己解决这个问题。

进一步阅读

  • java.util.Date
  • 的NIO API
  • getAttribute()
  • 的NIO API
  • 使用BasicFileAttributeView
  • tutorial
  • 使用FileAttributes
  • 的全面tutorial
  • 关于同一主题的另一个StackOverflow thread

答案 1 :(得分:5)

如何使用BasicFileAttributes类在Java中获取文件的创建日期,这是一个示例:

   Path path = Paths.get("C:\\Users\\jorgesys\\workspaceJava\\myfile.txt");
    BasicFileAttributes attr;
    try {
    attr = Files.readAttributes(path, BasicFileAttributes.class);

    System.out.println("Creation date: " + attr.creationTime());

    } catch (IOException e) {
    System.out.println("oops error! " + e.getMessage());
    }

答案 2 :(得分:3)

您无法在所有系统中执行此操作,因为并非所有系统都会记录该信息。例如,Linux并不是这样;见this SO thread

许多程序"修改"通过复制文件,对副本进行更改,然后将副本移动到原始文件的位置来复制文件。所以对于那些人来说,创造和最后修改之间并没有有意义的区别。