Определить дату создания файла в Java - PullRequest
94 голосов
/ 27 апреля 2010

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

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

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

Ответы [ 7 ]

150 голосов
/ 27 апреля 2010

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

Например (Предоставлено на основе комментария @ 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());
13 голосов
/ 18 ноября 2014

Я решил эту проблему, используя 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));
        }
    }
}
13 голосов
/ 22 января 2013

В качестве продолжения этого вопроса - поскольку он касается конкретно времени создания и обсуждает его получение с помощью новых классов 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);
    }
  }
}
11 голосов
/ 25 сентября 2015

Это основной пример того, как получить дату создания файла в 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());
}
9 голосов
/ 27 апреля 2010

В системе Windows вы можете использовать бесплатную библиотеку FileTimes .

В будущем это будет проще с Java NIO.2 (JDK 7) и пакетом java.nio.file.attribute .

Но помните, что большинство файловых систем Linux не поддерживают временные метки создания файлов .

9 голосов
/ 27 апреля 2010

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

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

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

0 голосов
/ 26 апреля 2019

в 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());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...