Определение даты создания файла в Java

Есть еще один похожий вопрос на мой StackOverflow (Как получить дату создания файла в Java), но ответ на самом деле не существует, поскольку OP возникла другая потребность, которую можно было решить с помощью других механизмов. Я пытаюсь создать список файлов в каталоге, который можно сортировать по возрасту, следовательно, необходимо указать дату создания файла.

У меня не было хорошего способа сделать это после многократного траления в Интернете. Есть ли способ получения дат создания файлов?

Кстати, в настоящее время в системе Windows может потребоваться это для работы с системой Linux. Кроме того, я не могу гарантировать, что соглашение об именах файлов будет соблюдаться там, где дата и время создания встроены в имя.

Ответ 1

Java nio имеет параметры доступа к createTime и другим метаданным, пока файловая система предоставляет его. Проверьте эту ссылку вне

Например (Предоставлено на основе комментария @ydaetskcoR):

Path file = ...;
BasicFileAttributes attr = Files.readAttributes(file, 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));
        }
    }
}

Ответ 3

В качестве продолжения этого вопроса - поскольку он относится конкретно к времени создания и обсуждает его получение через новые классы nio - кажется, сейчас в реализации JDK7 вам не повезло. Приложение: такое же поведение в OpenJDK7.

В файловых системах Unix вы не можете получить временную метку создания, вы просто получите копию последнего времени модификации. Так грустно, но, к сожалению, это правда. Я не уверен, почему это так, но код специально делает это, как показано ниже.

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;

public class TestFA {
  static void getAttributes(String pathStr) throws IOException {
    Path p = Paths.get(pathStr);
    BasicFileAttributes view
       = Files.getFileAttributeView(p, BasicFileAttributeView.class)
              .readAttributes();
    System.out.println(view.creationTime()+" is the same as "+view.lastModifiedTime());
  }
  public static void main(String[] args) throws IOException {
    for (String s : args) {
        getAttributes(s);
    }
  }
}

Ответ 4

Это базовый пример того, как получить дату создания файла в Java, используя класс BasicFileAttributes:

   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());
    //System.out.println("Last access date: " + attr.lastAccessTime());
    //System.out.println("Last modified date: " + attr.lastModifiedTime());
    } catch (IOException e) {
    System.out.println("oops error! " + e.getMessage());
}

Ответ 5

API java.io.File поддерживает только последнее измененное время. И Интернет очень тихий по этой теме.

Если я не пропустил что-то значительное, библиотека Java, как есть (вплоть до Java 7), не включает эту возможность. Поэтому, если вы отчаянно нуждались в этом, одно из решений заключалось бы в написании кода C (++) для вызова системных подпрограмм и вызова его с помощью JNI. Однако большая часть этой работы уже сделана для вас в библиотеке JNA.

Однако для этого вам все равно нужно сделать небольшое кодирование ОС в Java, хотя вы, вероятно, не найдете тех же системных вызовов, доступных в Windows и Unix/Linux/BSD/OS X.

Ответ 7

В системе Windows вы можете попробовать этот учебник, он предлагает обходное решение для версий java до Java 7....

Ответ 8

в java1. 7+ Вы можете использовать этот код, чтобы получить время создания файла!

private static LocalDateTime getCreateTime(File file) throws IOException {
        Path path = Paths.get(file.getPath());
        BasicFileAttributeView basicfile = Files.getFileAttributeView(path, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS);
        BasicFileAttributes attr = basicfile.readAttributes();
        long date = attr.creationTime().toMillis();
        Instant instant = Instant.ofEpochMilli(date);
        return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    }