93 votes

Déterminer la date de création du fichier en Java

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à que l'OP avait un besoin différent qui pourrait être résolu par le biais d'autres mécanismes. Je suis en train de créer une liste des fichiers dans un répertoire qui peut être triée selon l'âge, d'où la nécessité pour la date de création du fichier.

Je n'ai pas trouve le bon moyen de le faire après beaucoup de chalutage de la web. Est-il un mécanisme pour obtenir la création du fichier de dates?

BTW, actuellement sur un système Windows, peuvent travailler sur un système Linux. Aussi, je ne peux pas garantir qu'une convention de nommage de fichier serait suivie d'où la date/heure de création est incorporé dans le nom.

147voto

ring bearer Points 8369

Java nio a des options pour accéder à creationTime et à d'autres méta-données tant que le système de fichiers le fournit. Vérifiez ce lien

12voto

David Nugent Points 61

Comme suivi à cette question, car il se rapporte spécifiquement au moment de la création et de la traite de l'obtenir via la nouvelle nio classes -, il semble maintenant dans JDK7 de la mise en œuvre, vous êtes hors de la chance. Addendum: même comportement est en OpenJDK7.

Sur les systèmes de fichiers Unix vous ne pouvez pas récupérer le timestamp de création, vous obtenez tout simplement une copie de la dernière date de modification. C'est tellement triste, mais malheureusement vrai. Je ne suis pas sûr pourquoi, mais le code spécifique n'est que, comme la suite va le montrer.

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

9voto

Jacek S Points 379

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 .

9voto

Carl Smotricz Points 36400

L'API de java.io.File prend uniquement en charge l'obtention de la dernière modifiés de temps. Et l'Internet est très calme sur ce sujet.

À moins que j'ai raté quelque chose d'important, la bibliothèque Java comme (mais non compris Java 7) ne prend pas en charge cette fonctionnalité. Donc, si vous êtes désespéré pour cela, une solution serait d'écrire en C(++) code pour système d'appel des routines et de l'appeler avec la JNI. La plupart de ce travail semble être déjà fait pour vous dans une bibliothèque appelée JNA, cependant.

Vous devez peut-être faire un peu de spécifique au système d'exploitation de codage en Java pour cela, mais, comme vous l'aurez probablement pas trouver le même système d'appels disponible sous Windows et Unix/Linux/BSD/OS X.

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: