Es gibt eine andere ähnliche Frage wie bei StackOverflow ( So erhalten Sie das Erstellungsdatum einer Datei in Java ), aber die Antwort ist nicht wirklich da, da das OP einen anderen Bedarf hatte, der über andere Mechanismen gelöst werden könnte. Ich versuche, eine Liste der Dateien in einem Verzeichnis zu erstellen, die nach Alter sortiert werden kann, weshalb das Erstellungsdatum der Datei erforderlich ist.
Ich habe keine gute Möglichkeit gefunden, dies nach langem Durchsuchen des Webs zu tun. Gibt es einen Mechanismus zum Abrufen von Dateierstellungsdaten?
BTW, derzeit auf einem Windows-System, benötigt dies möglicherweise auch, um auf einem Linux-System zu funktionieren. Ich kann auch nicht garantieren, dass eine Dateinamenskonvention befolgt wird, bei der das Erstellungsdatum / die Erstellungszeit in den Namen eingebettet sind.
quelle
Antworten:
Java nio bietet Optionen für den Zugriff auf CreationTime und andere Metadaten, sofern das Dateisystem dies bereitstellt. Überprüfen Sie diesen Link aus
Zum Beispiel (bereitgestellt basierend auf dem Kommentar von @ ydaetskcoR):
quelle
readAttributes(file.toPath(), BasicFileAttributes.class)
Sie sonst erhalten Sie:no suitable method found for readAttributes(File,Class<BasicFileAttributes>) method Files.<A>readAttributes(Path,Class<A>,LinkOption...) is not applicable (cannot infer type-variable(s) A (argument mismatch; File cannot be converted to Path))
statx
syscall in einer neueren Linux-Kernel-Version hinzugefügt wurde.Ich habe dieses Problem mit JDK 7 mit folgendem Code gelöst:
quelle
Als Folge dieser Frage - da sie sich speziell auf die Erstellungszeit bezieht und die Erlangung über die neuen nio-Klassen erörtert - scheint es, dass Sie in der Implementierung von JDK7 derzeit kein Glück haben. Nachtrag: Das gleiche Verhalten ist in OpenJDK7.
Auf Unix-Dateisystemen können Sie den Erstellungszeitstempel nicht abrufen. Sie erhalten lediglich eine Kopie der letzten Änderungszeit. So traurig, aber leider wahr. Ich bin mir nicht sicher, warum das so ist, aber der Code macht das speziell, wie das Folgende zeigen wird.
quelle
stat
funktioniert nicht. Sofern Sie nicht zufällig einen Kernel höher als 4.11 mit glibc höher als 2.28 und Coreutils höher als 8.31 ausführen,stat
wird die Geburt der Datei gemeldet . Siehe verwandte Antwort unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/… Derzeit verwendet das JDK statx syscal nicht.Dies ist ein grundlegendes Beispiel für das Abrufen des Erstellungsdatums einer Datei
Java
mithilfe derBasicFileAttributes
Klasse:quelle
Die API von
java.io.File
unterstützt nur das Abrufen der zuletzt geänderten Zeit. Auch in diesem Bereich ist das Internet sehr leise.Sofern ich nichts Wichtiges verpasst habe, enthält die Java-Bibliothek (bis zu, aber noch nicht in Java 7 enthalten) diese Funktion nicht. Wenn Sie also verzweifelt danach suchen, besteht eine Lösung darin, C (++) - Code zu schreiben, um Systemroutinen aufzurufen und mit JNI aufzurufen. Der größte Teil dieser Arbeit scheint jedoch bereits in einer Bibliothek namens JNA für Sie erledigt worden zu sein .
Möglicherweise müssen Sie hierfür jedoch noch ein wenig betriebssystemspezifische Codierung in Java vornehmen, da in Windows und Unix / Linux / BSD / OS X wahrscheinlich nicht dieselben Systemaufrufe verfügbar sind.
quelle
File
Klasse diese Funktion nicht besitzt, ist, dass die meisten Dateisysteme diese Informationen nicht einmal verfolgen. Und diejenigen, die sich nicht immer einig sind, wann es aktualisiert werden soll.touch
die Mod-Zeit ändern und dann erneut überprüfen.Auf einem Windows-System können Sie die kostenlose FileTimes- Bibliothek verwenden.
Dies wird in Zukunft mit Java NIO.2 (JDK 7) und dem Paket java.nio.file.attribute einfacher .
Beachten Sie jedoch, dass die meisten Linux-Dateisysteme keine Zeitstempel für die Dateierstellung unterstützen .
quelle
in java1.7 + Mit diesem Code können Sie die Erstellungszeit für Dateien ermitteln!
quelle
Instant.ofEpochMilli(date)
. Vielen Dank