2012-09-13 6 views
8

sono in grado di fare questo:Android: come ottenere una lista drectory ordinata per nome o per data decrescente?

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

ho copiato da una risposta di StackOverflow!

C'è un modo per elencare File ok tipo "directory" (cartella) e per elencare in ordine alfabetico inverso? ... E per data inversa?

+0

sì. cosa hai provato? – njzk2

+0

Non ho provato nulla fino ad ora ... – realtebo

risposta

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

Usa Array.sort() per confrontare il nome dei file.

Edit: Usa questo codice per ordinare per data

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 !!!! E quale metodo per confrontare la data lastmodified? o data di creazione, è identica ... – realtebo

+1

lastmodifed restituisce un valore lungo. Quindi devi usare ">" all'interno confronta – Blackbelt

+0

Solo una modifica al codice del codice nero: Devo rimuovere @override ... Non so perché, ma eclissi mi dice di rimuovere ... e ho rimosso – realtebo

2

Puntatori:

File.isDirectory() 

File.lastModified() 
+0

grazie! lastModified aiutami nella seconda parte del problema – realtebo

0

Se si desidera ordinare data saggio quindi scegliere sotto il codice, e se si vuole poi nome già risposta è al di sopra :)

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

Il modo giusto per ordinare i file in base alla data di ultima modifica in modalità inversa sta facendo:

Arrays.sort(Files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 

per questa istruzione è necessario biblioteca commons.io da org.apache che è possibile scaricare dal here

1

è possibile utilizzare sotto codice. ha funzionato per me

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

Ho risolto questo problema utilizzando questo

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

torno 0 e 1 invece di lastModified() valore che risolto il mio problema.

0

mi è stato sempre un'eccezione

IllegalArgumentException: Metodo di confronto viola il suo contratto generale!

quindi ho usato questo e ha funzionato bene:

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; 
}}); 
Problemi correlati