Есть еще один похожий вопрос на мой 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.
Ответ 6
В системе Windows вы можете использовать бесплатную библиотеку FileTimes.
В будущем это будет проще с Java NIO.2 (JDK 7) и пакетом java.nio.file.attribute.
Но помните, что большинство файловых систем Linux не поддерживают временные метки создания файлов.
Ответ 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());
}