¿Cómo encuentro el último archivo modificado en un directorio en java?¿Cómo encuentro el último archivo modificado en un directorio en Java?
Respuesta
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;
}
Pensé que sería más limpio usar un comparador personalizado, pero de esta manera es más rápido. –
utilizando un comparador es una buena práctica, pero esta es una tarea sencilla y podría prescindir de ella. – Bozho
no. cuanto mayor sea el valor largo, más tarde se modificará el archivo. Si ese fue el motivo del voto a favor, no dude en deshacerlo;) – Bozho
combinar estas dos:
- Puede obtener la última modificación de un archivo usando
File.lastModified()
. - Para enumerar todos los archivos en un directorio, use
File.listFiles()
.
Tenga en cuenta que en Java el objeto java.io.File
se utiliza para los directorios y archivos.
Puede recuperar la hora de la última modificación utilizando el método File.lastModified(). Mi solución sugerida sería implementar un comparador personalizado que ordene en lastModified() - ordenar e insertar todos los archivos en el directorio en un TreeSet que ordena usando este comparador.
ejemplo no probado:
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 solución sugerida por Bozho es probablemente más rápido si sólo necesita el último archivo. Por otro lado, esto podría ser útil si necesitas hacer algo más complicado.
El comparador en solución de Emil sería más limpia de esta manera
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())
a int
puede producir resultados inesperados.
Su problema es similar a: How to get only 10 last modified files from directory using Java?
Sólo cambia el código del filtro para tener un solo archivo y el método de aceptar simplemente debe comparar las dos marcas de tiempo.
código no probado:
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;
}
}
ahora, dir.listFiles de llamadas con una instancia de este filtro como argumento. Al final, filter.topFile es el último archivo modificado.
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;
}
Esto funciona muy bien para mí
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());
}
}
Vamos a suponer que la variable thePath
contiene el directorio que queremos buscar, el siguiente fragmento devuelve el último archivo modificado en su interior:
Files.walk(thePath)
.sorted((f1, f2) -> -(int)(f1.toFile().lastModified() - f2.toFile().lastModified()))
.skip(1)
.findFirst()
Lo que hace es, primero ordenar los archivos por su última modificación en tiempo inverso, luego omitir el directorio en sí mismo, y finalmente tomar el primer elemento en la secuencia (que es el último una modificación).
Si bien este fragmento de código puede ser la solución, [incluida una explicación] (// meta.stackexchange.com/questions/114762/explaining-entirely-cobded-answers-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. – derM
- 1. último archivo modificado en un directorio
- 2. abrir el último archivo modificado en el directorio usando vi
- 3. Seleccione el último archivo modificado de un directorio
- 4. ¿Cómo encuentro el directorio actual?
- 5. ¿Cómo encuentro el directorio 'temp' en Linux?
- 6. Fecha último objeto modificado
- 7. Guardar WordprocessingDocument modificado en el nuevo archivo
- 8. Java: obtenga el archivo más nuevo en un directorio?
- 9. ¿Cómo abrir la Terminal en el último directorio abierto?
- 10. SVN: ¿Cómo ignorar un archivo modificado en la confirmación?
- 11. No encuentro el archivo debug.keystore
- 12. ¿Cómo puedo obtener la ruta del último archivo creado en un directorio usando Ruby?
- 13. último objeto en java
- 14. Guarde el archivo matplotlib en un directorio
- 15. ¿Es posible crear un enlace simbólico al último archivo en un directorio?
- 16. ¿Cómo guardar el documento DOM analizado y modificado en el archivo xml?
- 17. utilidad para descomprimir un archivo completo en un directorio en Java
- 18. ¿Cómo encuentro el índice de un elemento en un vector?
- 19. ¿Cómo se determina el último número de revisión de SVN enraizado en un directorio?
- 20. Directorio actual en el archivo de propiedades java
- 21. Determine si se ha modificado un archivo abierto en C
- 22. Buscar nombre de usuario (quién) archivo modificado en C#
- 23. QSettings - El selector de archivos debe recordar el último directorio
- 24. ¿Cómo copiar un archivo en el servidor ftp a un directorio en el mismo servidor en Java?
- 25. ¿Cómo puedo contar un archivo desde el directorio en Python?
- 26. Python: ¿Cómo obtener archivos en un archivo sin el directorio?
- 27. ¿Cómo leo de un archivo en el mismo directorio?
- 28. django: ¿cómo poner un archivo estático en el directorio raíz?
- 29. ¿Cómo obtener el directorio de un archivo argparse en Python?
- 30. cómo guardar un archivo de vídeo en el directorio documento
¿Estás preguntando cómo ordenar por última hora modificada? ¿O quieres un algoritmo que encuentre el máximo de la última hora modificada? Estas parecen soluciones obvias; ¿Qué estás realmente pidiendo? –