2011-06-12 79 views
15

Tengo un método que lee el contenido de los archivos ubicados en un directorio. Pero por razones funcionales, es necesario comenzar con el archivo más antiguo (indicado por la propiedad lastmodified) y finalizar con el archivo más nuevo.¿Cómo ordenar los archivos de un directorio por fecha en java?

Este es el código de cómo abrir y leer los archivos:

 FilenameFilter filter = new FilenameFilter() { 
     public boolean accept(File dir, String name) { 
      return name.matches("access_log.*"); 
     } 
    }; 

    File folder = new File("/home/myfiles"); 
    File[] listOfFiles = folder.listFiles(filter); 

    for (int i = 0; i < listOfFiles.length; i++) { 
     String sFileName = listOfFiles[i].getName(); 
     File accessLogFile = new File(aLog.getPath(), sFileName); 
     long time=accessLogFile.lastModified(); 
     // do something with the file 
    } 

Alguien ha una solución de cómo puedo ordenar rápidamente mi lista de archivos por fecha?

+0

¿La opción http://stackoverflow.com/questions/203030/best-way-way-files-in-java-sorted-by-date-modified contiene la respuesta a su pregunta? – sverre

+0

¿Has probado FileUtils.dirListByAscendingDate? http://www.rgagnon.com/javadetails/java-0606.html – excanoe

+1

Parece que le interesan los archivos de registro. A menudo se nombran de tal manera que la ordenación léxica por nombre de archivo también se ordena por tiempo. –

Respuesta

35

Editar: En java8:

Arrays.sort(files, (a, b) -> Long.compare(a.lastModified(), b.lastModified()));link

me encontré con algo de código interesante, muy cerca de lo que necesita, tener una mirada en ella (Sólo una rápida sobre la aplicación de ejecución de Comparador):

File f = new File("/home/myfiles"); 

File [] files = f.listFiles(); 

Arrays.sort(files, new Comparator() 
{ 
    public int compare(Object o1, Object o2) { 

     if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
      return -1; 
     } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
      return +1; 
     } else { 
      return 0; 
     } 
    } 

}); 

También puedes echar un vistazo a esta publicación, ver cómo el tipo resolvió el problema: Best way to list files in Java, sorted by Date Modified?

+0

Gracias - ¡esto funciona perfecto! – Ralph

+1

Sea bienvenido – sfrj

+1

Hola, podría generar esto, lo que significaría que podría eliminar el casting en el método de comparación: Arrays.sort (archivos, nuevo comparador () {...}) –

0

Utilizaría FileUtils en commons-io para recuperar la Colección de archivos. Entonces aplicaría un comparador personalizado. Debería ser bastante fácil.

Cuestiones relacionadas