Comment trouver le dernier fichier modifié dans un répertoire java?Comment trouver le dernier fichier modifié dans un répertoire Java?
Répondre
private File getLatestFilefromDir(String dirPath){
File dir = new File(dirPath);
File[] files = dir.listFiles();
if (files == null || files.length == 0) {
return null;
}
File lastModifiedFile = files[0];
for (int i = 1; i < files.length; i++) {
if (lastModifiedFile.lastModified() < files[i].lastModified()) {
lastModifiedFile = files[i];
}
}
return lastModifiedFile;
}
Je pensais qu'il serait plus propre d'utiliser un comparateur personnalisé, mais de cette façon, c'est plus rapide. –
en utilisant un comparateur est une bonne pratique, mais ce n'est qu'une tâche simple et pourrait s'en passer. – Bozho
no. plus la valeur longue est grande, plus le fichier est modifié ultérieurement. Si cela était la raison de la downvote, n'hésitez pas à l'annuler;) – Bozho
combiner ces deux:
- Vous pouvez obtenir la dernière modification d'un fichier en utilisant
File.lastModified()
. Pour afficher la liste de tous les fichiers d'un répertoire, utilisezFile.listFiles()
.
Notez que dans Java l'objet java.io.File
est utilisé pour les répertoires et les fichiers.
Vous pouvez récupérer l'heure de la dernière modification à l'aide de la méthode File.lastModified(). Ma solution suggérée serait d'implémenter un comparateur personnalisé qui trie dans lastModified() - order et insère tous les fichiers dans le répertoire dans un TreeSet qui trie en utilisant ce comparateur.
exemple Untested:
SortedSet<File> modificationOrder = new TreeSet<File>(new Comparator<File>() {
public int compare(File a, File b) {
return (int) (a.lastModified() - b.lastModified());
}
});
for (File file : myDir.listFiles()) {
modificationOrder.add(file);
}
File last = modificationOrder.last();
La solution proposée par Bozho est probablement plus rapide si vous avez seulement besoin du dernier fichier. D'un autre côté, cela peut être utile si vous avez besoin de faire quelque chose de plus compliqué.
Le comparateur dans la solution de Emil serait plus propre de cette façon
public int compare(File a, File b) {
if ((a.lastModified() < b.lastModified())) {
return 1;
} else if ((a.lastModified() > b.lastModified())) {
return -1;
}
return 0;
}
casting (a.lastModified() - b.lastModified())
à int
peut produire des résultats inattendus.
Votre problème est similaire à: How to get only 10 last modified files from directory using Java?
Il suffit de changer le code de filtre pour avoir un seul fichier et la méthode accept doit simplement comparer les deux horodateurs.
code non testé:
class TopFileFilter implements FileFilter {
File topFile;
public boolean accept(File newF) {
if(topFile == null)
topFile = newF;
else if(newF.lastModified()>topFile.lastModified())
topFile = newF;
return false;
}
}
Maintenant, dir.listFiles d'appel avec une instance de ce filtre comme argument. À la fin, filter.topFile est le dernier fichier modifié.
import org.apache.commons.io.comparator.LastModifiedFileComparator;
import org.apache.commons.io.filefilter.WildcardFileFilter;
...
...
/* Get the newest file for a specific extension */
public File getTheNewestFile(String filePath, String ext) {
File theNewestFile = null;
File dir = new File(filePath);
FileFilter fileFilter = new WildcardFileFilter("*." + ext);
File[] files = dir.listFiles(fileFilter);
if (files.length > 0) {
/** The newest file comes first **/
Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
theNewestFile = files[0]
}
return theNewestFile;
}
Cela fonctionne très bien pour moi
String path = "C:\\Work\\Input\\";
File dir = new File(path);
File[] files = dir.listFiles();
Arrays.sort(files, new Comparator<File>() {
public int compare(File f1, File f2) {
return Long.valueOf(f2.lastModified()).compareTo(
f1.lastModified());
}
});
for (int index = 0; index < files.length; index++) {
// Print out the name of files in the directory
System.out.println(files[index].getName());
}
}
Supposons que la thePath
variable contient le répertoire que nous voulons rechercher, l'extrait suivant retourne le dernier fichier modifié à l'intérieur:
Files.walk(thePath)
.sorted((f1, f2) -> -(int)(f1.toFile().lastModified() - f2.toFile().lastModified()))
.skip(1)
.findFirst()
Ce qu'il fait est, d'abord trier les fichiers par leur dernière heure de modification à l'envers, puis ignorer le répertoire lui-même, et enfin prendre le premier élément dans le flux (qui est le dernier modifié un).
Bien que cet extrait de code puisse être la solution, [y compris une explication] (// meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers) aide vraiment à améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. – derM
- 1. Comment trouver le dernier sous-dossier modifié?
- 2. trouver le nom du dernier fichier modifié/ajouté dans svn
- 3. Apache vfs: récupère le dernier fichier modifié d'un répertoire (sftp)
- 4. ouvrir le dernier fichier modifié dans le répertoire en utilisant vi
- 5. comment trouver le dernier horodatage du fichier TYPE particulier dans ce répertoire?
- 6. Comment trouver le dossier modifié le plus récemment dans un répertoire en utilisant Ruby?
- 7. ftp obtenir le dernier fichier modifié par date
- 8. Je dois trouver un fichier dans le répertoire et le copier dans un répertoire différent
- 9. Trouver le fichier le plus ancien (récursivement) dans un répertoire
- 10. Python, trouver un fichier dans le même répertoire
- 11. comment puis-je écrire un script pour trouver le dernier fichier mis à jour et copier dans certain répertoire
- 12. mod_rewrite RewriteCond basé sur le dernier modifié? (.htaccess)
- 13. Trouver le dernier dimanche
- 14. Java - obtient le fichier le plus récent dans un répertoire?
- 15. Comment trouver un fichier dans Emacs sans répertoire exact connu?
- 16. Bash Script pour trouver le fichier le plus récemment modifié
- 17. comment obtenir la date et l'heure du dernier fichier de type modifié dans ce répertoire en C#
- 18. Fonction de bibliothèque Java pour trouver le fichier caché dans un répertoire différent
- 19. corrige le dernier élément modifié dans plusieurs balises de sélection?
- 20. Trouver le nouveau dossier dans un répertoire en Python
- 21. VBA Comment trouver le dernier identifiant d'insertion?
- 22. Trouver le répertoire de support d'application sur OSX dans java
- 23. Comment trouver le répertoire d'installation d'une application Java?
- 24. Fichier/répertoire java api
- 25. Comment écrire regex pour trouver un répertoire dans une URL?
- 26. Comment trouver le répertoire parent d'un fichier en Perl?
- 27. Trouver le dernier TR (groupe)
- 28. Ant: trouver le dernier dossier dans un dossier
- 29. Obtenir le premier fichier dans le répertoire
- 30. mod_rewrite ignorer dernier répertoire si c'est le troisième répertoire
Demandez-vous comment trier par heure de dernière modification? Ou voulez-vous un algorithme qui trouve le maximum de la dernière fois modifié? Cela semble être une solution évidente. qu'est-ce que vous demandez vraiment? –