131 votes

Déterminer la date de création d'un fichier en Java

Il existe 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à puisque le PO avait un besoin différent qui pouvait être résolu par d'autres mécanismes. J'essaie de créer une liste des fichiers dans un répertoire qui peut être triée par âge, d'où le besoin de la date de création du fichier.

Après avoir parcouru le web, je n'ai pas trouvé de moyen efficace de le faire. Existe-t-il un mécanisme permettant d'obtenir les dates de création des fichiers ?

BTW, actuellement sur un système Windows, peut avoir besoin que cela fonctionne sur un système Linux aussi bien. De plus, je ne peux pas garantir le respect d'une convention de dénomination des fichiers où la date et l'heure de création sont intégrées au nom.

2 votes

Bon, après plus de discussions et d'enquêtes sur les systèmes de fichiers, nous avons décidé que l'utilisation de la date de dernière modification est suffisante car elle aurait probablement dû être vérifiée avec la date de création. Les deux doivent être vérifiées pour déterminer si un ancien fichier a été récemment modifié et donc toujours actif. Il suffit donc de vérifier le fichier modifié le plus loin dans le passé. Merci pour toutes ces informations. BTW, j'aimerais bien utiliser nio, mais la version Linux ici ne supporte pas la création de fichiers de toute façon.

10voto

Carl Smotricz Points 36400

L'API de java.io.File ne permet d'obtenir que le dernier modifié temps. Et l'Internet est très silencieux sur ce sujet également.

À moins que je n'aie manqué quelque chose d'important, la bibliothèque Java telle qu'elle est (jusqu'à Java 7, mais pas encore) n'inclut pas cette capacité. Donc, si vous en aviez désespérément besoin, une solution serait d'écrire du code C(++) pour appeler des routines système et de l'appeler en utilisant JNI. La majeure partie de ce travail semble être déjà effectuée pour vous dans une bibliothèque appelée JNA mais

Il se peut toutefois que vous deviez effectuer un peu de codage spécifique au système d'exploitation en Java, car vous ne trouverez probablement pas les mêmes appels système disponibles dans Windows et Unix/Linux/BSD/OS X.

2 votes

Oui, Java 7 serait bien car le nio semble avoir cela dans ses attributs de base. Je n'aurais jamais cru que je me plaindrais d'être né trop tôt ;)

7 votes

La raison pour laquelle le File n'a pas cette capacité est que la plupart des systèmes de fichiers ne suivent même pas cette information. Et ceux qui le font ne sont pas toujours d'accord sur le moment où elle doit être mise à jour.

0 votes

@Syntactic : En fait la plupart des systèmes de fichiers enregistrent cette information . Les exceptions sont ext<=3 et Reiser. FAT, NTFS, HFS, ZFS et ext4 le supportent. Mais il a été lent à se propager à travers toutes les couches de Linux et les bibliothèques et commandes pour le rendre universellement utilisé.

1voto

zhangxinqiang Points 11

En java1.7+. Vous pouvez utiliser ce code pour obtenir l'heure de création d'un fichier !

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());
    }

0 votes

Pourriez-vous nous expliquer pourquoi nous avons besoin de cet effort ? Instant.ofEpochMilli(date) . Remerciements

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X