在 Java 中确定文件创建日期

2022-08-31 08:33:42

在StackOverflow上还有另一个类似的问题(如何在Java中获取文件的创建日期),但答案并不存在,因为OP有不同的需求,可以通过其他机制来解决。我正在尝试在可以按年龄排序的目录中创建文件列表,因此需要文件创建日期。

在对网络进行了多次拖网之后,我还没有找到任何好的方法。是否有获取文件创建日期的机制?

顺便说一句,目前在Windows系统上,可能也需要它在Linux系统上工作。另外,我不能保证在名称中嵌入创建日期/时间时会遵循文件命名约定。


答案 1

Java nio可以选择访问和其他元数据,只要文件系统提供它。查看此链接creationTime

例如(根据@ydaetskcoR的评论提供):

Path file = ...;
BasicFileAttributes attr = Files.readAttributes(file.toPath(), BasicFileAttributes.class);

System.out.println("creationTime: " + attr.creationTime());
System.out.println("lastAccessTime: " + attr.lastAccessTime());
System.out.println("lastModifiedTime: " + attr.lastModifiedTime());

答案 2

我用这个代码用JDK 7解决了这个问题:

package FileCreationDate;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class Main
{
    public static void main(String[] args) {

        File file = new File("c:\\1.txt");
        Path filePath = file.toPath();

        BasicFileAttributes attributes = null;
        try
        {
            attributes =
                    Files.readAttributes(filePath, BasicFileAttributes.class);
        }
        catch (IOException exception)
        {
            System.out.println("Exception handled when trying to get file " +
                    "attributes: " + exception.getMessage());
        }
        long milliseconds = attributes.creationTime().to(TimeUnit.MILLISECONDS);
        if((milliseconds > Long.MIN_VALUE) && (milliseconds < Long.MAX_VALUE))
        {
            Date creationDate =
                    new Date(attributes.creationTime().to(TimeUnit.MILLISECONDS));

            System.out.println("File " + filePath.toString() + " created " +
                    creationDate.getDate() + "/" +
                    (creationDate.getMonth() + 1) + "/" +
                    (creationDate.getYear() + 1900));
        }
    }
}