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

10

我不需要最后修改时间和最后访问时间,而是文件创建时间。我没有找到相关信息。也许有一些库?

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个回答

10
如yshavit所说,并非所有操作系统都记录创建日期。然而,在支持此功能的操作系统上,您应该能够使用java.nio.file来确定此信息——请参阅files.getAttribute的文档——请注意,BasicFileAttributeView有一个字段代表creationTime
您可以使用FileSystems.getDefault();来确定当前操作系统支持哪些FileAttributeView
在支持BasicFileAttributeView的系统中,Files.getAttribute(path, "basic:createdAt");将返回一个FileTime对象,其中包含文件创建日期。您需要将其转换为java.util.Date对象,但我将让您自己解决这个问题。
进一步阅读:
- 用于getAttribute()的NIO API - 用于BasicFileAttributeView的NIO API - 使用readAttributes()教程
  • 一个关于使用FileAttributes的综合教程
  • 同一主题的另一个StackOverflow线程

  • 6

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

       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());
        }
    

    3

    由于并非所有系统都记录该信息,因此您将无法跨所有系统执行此操作。例如,Linux不支持此功能。请参见此SO线程

    许多程序通过复制文件、对副本进行更改,然后将副本移动到原始文件的位置来“修改”文件。因此,对于这些程序,创建时间和最后修改时间之间没有实际的区别。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接