2012-09-13 8 views
8

soy capaz de hacer esto:Android: ¿cómo obtener una lista drectory ordenada por nombre o por fecha descendente?

File images = new File(path); 
    File[] imageList = images.listFiles(new FilenameFilter(){ 
     public boolean accept(File dir, String name) 
     { 
      return name.endsWith(".jpg"); 
     } 
    }); 

I copiado de una respuesta de stackoverflow!

¿Hay alguna manera de listarFile ok kind "directorio" (carpeta) y listar por orden alfabético inverso? ... ¿Y por fecha reversa?

+0

sí. ¿Qué has intentado? – njzk2

+0

No he probado nada hasta ahora ... – realtebo

Respuesta

17
final File[] sortedFileName = images.listFiles() 

if (sortedFileName != null && sortedFileName.length > 1) { 
     Arrays.sort(sortedFileName, new Comparator<File>() { 
      @Override 
      public int compare(File object1, File object2) { 
       return object1.getName().compareTo(object2.getName()); 
      } 
    }); 
} 

Uso Array.sort() para comparar el nombre de los archivos.

Editar: Usar este código para ordenar por fecha

final File[] sortedByDate = folder.listFiles(); 

if (sortedByDate != null && sortedByDate.length > 1) { 
     Arrays.sort(sortedByDate, new Comparator<File>() { 
      @Override 
      public int compare(File object1, File object2) { 
       return (int) ((object1.lastModified() > object2.lastModified()) ? object1.lastModified(): object2.lastModified()); 
      } 
    }); 
} 
+0

wow !!!! ¿Y qué método para comparar la última fecha modificada? o la fecha de creación, es identica l ... – realtebo

+1

lastmodifed devuelve un largo. Así que tienes que usar ">" dentro de comparar – Blackbelt

+0

Solo una modificación del código de cinturón negro: Debo eliminar @override ... No sé por qué, pero eclipse dime que elimine ... y he eliminado – realtebo

2

Punteros:

File.isDirectory() 

File.lastModified() 
+0

gracias! lastModified me ayuda a la segunda mitad del problema – realtebo

0

Si desea ordenar fecha sabia luego elija debajo de código, y si desea escuchar el nombre ya continuación respuesta es anterior :)

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; 
    } 
} 
}); 
1

La forma correcta de ordenar los archivos por fecha de la última modificación en el modo inverso está haciendo:

Arrays.sort(Files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 

para esta instrucción, necesitará la biblioteca commons.io de org.apache que se puede descargar desde here

1

puede utilizar a continuación código. trabajó para mi.

final File[] files= file.listFiles(); 
if (files != null && files.length > 1) { 
      Collections.sort(Arrays.asList(files), new Comparator<File>() { 
       public int compare(File o1, File o2) { 
        long lastModifiedO1 = o1.lastModified(); 
        long lastModifiedO2 = o2.lastModified(); 

        return (lastModifiedO2 < lastModifiedO1) ? -1 : ((lastModifiedO1 > lastModifiedO2) ? 1 : 0); 
       } 
      }); 
     } 
0

He resuelto este problema mediante el uso de esta

final File[] sortedByDate = folder.listFiles(); 

if (sortedByDate != null && sortedByDate.length > 1) { 
     Arrays.sort(sortedByDate, new Comparator<File>() { 
      @Override 
      public int compare(File object1, File object2) { 
       return (int) ((object1.lastModified() > object2.lastModified()) ? 0: 1); 
      } 
    }); 
} 

vuelvo 0 y 1 restaurantes en vez de lastModified() valor que resolvió mi problema.

0

que estaba recibiendo una excepción

IllegalArgumentException: Método de comparación viola su contrato general!

así que utilizaron este y funcionó bien:

Arrays.sort(filesList, new Comparator<File>() { 
    @Override 
    public int compare(File a, File b) { 
     if(a.lastModified() < b.lastModified()) 
     return 1; 
     if(a.lastModified() > b.lastModified()) 
     return -1; 
     return 0; 
}}); 
Cuestiones relacionadas