8
votes

Comment obtenir la dernière date et heure modifiée d'un répertoire en Java

Voir, le problème est que, dans Java, nous pouvons obtenir Date de lastmodifié par FileName.LastModifié () . Mais dans Windows, ce qui se passe est que chaque fois qu'un fichier est modifié, seul la date et l'heure de cette fichier sont modifiées, et non l'ensemble du dossier. Donc, je veux savoir quand a été modifié la dernière fois qu'un seul fichier unique a été modifié dans ce dossier, en utilisant Java?


0 commentaires

7 Réponses :


0
votes

Vous pouvez utiliser Watchservice Si vous utilisez Java7.


0 commentaires

0
votes

Eh bien, s'il s'agit de la manière du système ou du système de fichiers d'enregistrer des mises à jour, vous devrez peut-être effectuer une boucle récursive dans le répertoire. Pour chaque fichier du répertoire et de tout sous-répertoire, exécutez lastmodified et conservez la valeur la plus récente.


0 commentaires

0
votes

La façon dont je le vois, vous pouvez écrire quelque chose comme celui-ci (non testé): xxx

Diveaux est la variable que vous pourriez utiliser. < / p>


0 commentaires

8
votes

Rechercher le dernier (plus important) lastmodified () code> dans le répertoire Fichiers ou s'il n'y en a aucun, le répertoire est lui-même:

public static Date getLastModified(File directory) {
    File[] files = directory.listFiles();
    if (files.length == 0) return new Date(directory.lastModified());
    Arrays.sort(files, new Comparator<File>() {
        public int compare(File o1, File o2) {
            return new Long(o2.lastModified()).compareTo(o1.lastModified()); //latest 1st
        }});
    return new Date(files[0].lastModified());
}


5 commentaires

N'est pas une sorte inutile? Pourquoi ne pas simplement itérer et garder une trace de la modification la plus récente?


@Visage inutile, mais je préfère des doublures à écrire des boucles.


@Bohemian j'ai un dossier dans la carte SDCard de mon téléphone Android et je supprime un fichier manuellement. Mais lorsque j'obtiens la dernière heure de mise à jour du code ci-dessus, il ne conserve pas l'heure de suppression en tant que dernière heure de mise à jour. Pourquoi ?


Salut @ Bohemian ♦ Il y a un bug que @prateek a déclaré. Vous devez comparer votre résultat avec le dernier temps modifié du répertoire, car en cas de suppression, le dernier temps modifié est en réalité la dernière heure modifiée du répertoire.


Files.Listfiles () prendra beaucoup de temps pour exécuter si tout ce que vous souhaitez vérifier est un fichier unique modifié. Y a-t-il un moyen sans utiliser ListFiles ()?



1
votes

Je pense que vous ne serez pas en mesure d'obtenir une date correcte modifiée pour un dossier, car un dossier est créé / modifié, puis supprimé du dossier.

Ensuite, la logique indique la dernière date de modification basée sur les fichiers présents dans le dossier. Il ne considérera pas celui qui est supprimé.

Ainsi, lorsque vous comparez la dernière date modifiée à partir du programme Java et du système d'exploitation, il peut être différent.

IMHO, nous devrions demander à OS pour obtenir la dernière date modifiée pour un dossier.


0 commentaires

4
votes

J'ai écrit un petit morceau de code qui effectue une recherche récursive dans tous les sous-répertoires et renvoie la dernière date de modification. Il fait une recherche profonde, vous ne voudrez peut-être pas l'exécuter sur le répertoire racine. Voici le code (je n'ai pas testé de manière rigoureuse): xxx

Il suppose que le fichier fourni est un répertoire et renvoie également un long < / code> pas un date en soi. Vous pouvez convertir long à date à l'aide de la date S si nécessaire (qui n'est normalement pas nécessaire).


0 commentaires

3
votes

Voici un Java 7 Solution en utilisant filétime et chemin : xxx

Utilisation: xxx

Exemple de sortie: xxx

ceci a été dérivé du tutoriel Oracle de ici .


0 commentaires