2016-07-29 3 views
1

Der folgende Beispielcode stammt aus dem Internet, ich hoffe, the List<String> files nach Dateiname aufsteigend oder absteigend zu sortieren. Ich hoffe auf die L nach Datum der Datei aufsteigend oder absteigend, wie kann ich tun? Vielen Dank!Wie wird die Datei oder der Ordner nach Dateiname oder Datum aufsteigend oder absteigend in Android sortiert?

Die gleiche Question mit List<String> directories.

List<String> files = Arrays.asList(f.list(new FilenameFilter() { 
     @Override 
     public boolean accept(File dir, String name) { 
      File f=new File(dir, name);    

      return f.isFile()&&(f.isHidden()==false); 
     } 
    })); 
    Collections.sort(files); 




List<String> directories = Arrays.asList(f.list(new FilenameFilter() { 
    @Override 
    public boolean accept(File dir, String name) { 
     File f=new File(dir, name); 
     return f.isDirectory()&& (f.isHidden()==false); 
    } 
})); 
Collections.sort(directories); 

Antwort

3

Geben Sie einfach Ihre Datei-Array und es einfach sortieren.

Arrays.sort(files, new Comparator<File>() { 
    public int compare(File f1, File f2) { 
     return Long.compare(f1.lastModified(), f2.lastModified()); 
    } 
}); 

Demo:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     File path = Environment.getExternalStoragePublicDirectory("/DCIM/Camera"); 
     File[] filesList = path.listFiles(); 
     for (int i = 0; i < filesList.length; i++) { 
      Date lastModDate = new Date(filesList[i].lastModified()); 
      Log.i("Pre sorted", "File last modified @ : " + lastModDate.toString()); 
     } 

     Arrays.sort(filesList, new Comparator<File>() { 
      public int compare(File f1, File f2) { 
       return Long.compare(f1.lastModified(), f2.lastModified()); 
      } 
     }); 
     Log.i("sorted", "----------------------------------------"); 
     for (int i = 0; i < filesList.length; i++) { 
      Date lastModDate = new Date(filesList[i].lastModified()); 
      Log.i("Pro sorted", "File last modified @ : " + lastModDate.toString()); 
     } 
    } 
+0

Vielen Dank! Um Sohail Zahid: aber Ihr Code funktioniert nicht – HelloCW

+0

Falsche 2. Argument Typ. Gefunden: 'java.util.Comparator ', benötigt: 'java.util.Comparator ' – HelloCW

+0

Bitte zeigen Sie, wie Sie diesen Code verwenden? –

2

Sie mögen unter diesen Wert für Datum und anderen Vergleich für die Sortierung nach Dateinamen und ändern können. Oder einfach ApacheCommons verwenden, es wird direkte APIs geben

File[] directoryList = currentFolder.listFiles(); 
if (directoryList != null) { 
    List<File> directoryListing = new ArrayList<File>(); 
    directoryListing.addAll(Arrays.asList(directoryList)); 
    Collections.sort(directoryListing, new SortFileName()); 
    Collections.sort(directoryListing, new SortFolder()); 
} 


//sorts based on the files name 
public class SortFileName implements Comparator<File> { 
    @Override 
    public int compare(File f1, File f2) { 
      return f1.getName().compareTo(f2.getName()); 
    } 
} 

//sorts based on a file or folder. folders will be listed first 
public class SortFolder implements Comparator<File> { 
    @Override 
    public int compare(File f1, File f2) { 
     if (f1.isDirectory() == f2.isDirectory()) 
      return 0; 
     else if (f1.isDirectory() && !f2.isDirectory()) 
      return -1; 
     else 
      return 1; 
      } 
} 
Verwandte Themen