Voir, le problème est que, dans Java, nous pouvons obtenir Date de lastmodifié em> par FileName.LastModifié () code>. 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? P>
7 Réponses :
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 code> et conservez la valeur la plus récente. P>
La façon dont je le vois, vous pouvez écrire quelque chose comme celui-ci (non testé): Diveaux code> est la variable que vous pourriez utiliser. P> < / p>
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());
}
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 ()?
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. p>
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é. P>
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. p>
IMHO, nous devrions demander à OS pour obtenir la dernière date modifiée pour un dossier. p>
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): Il suppose que le fichier fourni code> est un répertoire et renvoie également un
long < / code> pas un
date code> en soi. Vous pouvez convertir
long code> à
date code> à l'aide de la date code> S si nécessaire (qui n'est normalement pas nécessaire). P> p>
Voici un Utilisation: p> Exemple de sortie: p> ceci a été dérivé du tutoriel Oracle de ici . p> p> Java 7 Code> Solution en utilisant
filétime code>
et chemin code>
: