Il y a une autre question similaire à la mienne sur StackOverflow ( Comment obtenir la date de création d'un fichier en Java ), mais la réponse n'est pas vraiment là car l'OP avait un besoin différent qui pourrait être résolu via d'autres mécanismes. J'essaie de créer une liste des fichiers dans un répertoire qui peut être trié par âge, d'où la nécessité de la date de création du fichier.
Je n'ai trouvé aucun bon moyen de le faire après de nombreuses recherches sur le Web. Existe-t-il un mécanisme pour obtenir les dates de création des fichiers?
BTW, actuellement sur un système Windows, peut également en avoir besoin pour fonctionner sur un système Linux. En outre, je ne peux pas garantir qu'une convention de dénomination de fichier serait suivie lorsque la date / heure de création est intégrée dans le nom.
la source
Réponses:
Java nio propose des options pour accéder à creationTime et à d'autres métadonnées tant que le système de fichiers les fournit. Vérifiez ce lien sur
Par exemple (fourni sur la base du commentaire de @ ydaetskcoR):
la source
readAttributes(file.toPath(), BasicFileAttributes.class)
autrement vous obtenez: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 a été ajouté dans la nouvelle version du noyau Linux.J'ai résolu ce problème en utilisant JDK 7 avec ce code:
la source
Pour faire suite à cette question - puisqu'elle concerne spécifiquement le moment de la création et discute de son obtention via les nouvelles classes nio - il semble qu'en ce moment, dans l'implémentation de JDK7, vous n'avez pas de chance. Addendum: même comportement dans OpenJDK7.
Sur les systèmes de fichiers Unix, vous ne pouvez pas récupérer l'horodatage de création, vous obtenez simplement une copie de l'heure de la dernière modification. Si triste, mais malheureusement vrai. Je ne sais pas pourquoi, mais le code le fait spécifiquement, comme le démontrera ce qui suit.
la source
stat
ne fonctionne pas. À moins que vous n'exécutiez un noyau supérieur à 4.11 avec glibc supérieur à 2.28 et coreutils supérieur à 8.31, alors vousstat
rapporterez la naissance du fichier. Voir la réponse associée unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/… Actuellement, le JDK n'utilise pas statx syscal.Voici un exemple de base de la façon d'obtenir la date de création d'un fichier dans
Java
, en utilisant laBasicFileAttributes
classe:la source
L'API de
java.io.File
ne prend en charge que la dernière heure de modification . Et Internet est également très silencieux sur ce sujet.Sauf si j'ai manqué quelque chose d'important, la bibliothèque Java telle quelle (jusqu'à Java 7, mais pas encore incluse) n'inclut pas cette fonctionnalité. Donc, si vous étiez désespéré pour cela, une solution serait d'écrire du code C (++) pour appeler les routines système et de l'appeler en utilisant JNI. Cependant, la plupart de ce travail semble déjà être fait pour vous dans une bibliothèque appelée JNA .
Vous devrez peut-être encore faire un peu de codage spécifique au système d'exploitation en Java pour cela, car vous ne trouverez probablement pas les mêmes appels système disponibles sous Windows et Unix / Linux / BSD / OS X.
la source
File
classe n'a pas cette capacité est que la plupart des systèmes de fichiers ne suivent même pas ces informations. Et ceux qui ne s'entendent pas toujours sur le moment où il doit être mis à jour.touch
pour changer l'heure du mod, puis en vérifiant à nouveau.Sur un système Windows, vous pouvez utiliser la bibliothèque FileTimes gratuite .
Cela sera plus facile à l'avenir avec Java NIO.2 (JDK 7) et le package java.nio.file.attribute .
Mais rappelez-vous que la plupart des systèmes de fichiers Linux ne prennent pas en charge les horodatages de création de fichiers .
la source
dans java1.7 + Vous pouvez utiliser ce code pour obtenir l'heure de création du fichier!
la source
Instant.ofEpochMilli(date)
. Merci