2016-07-29 299 views
1

以下示例代碼來自Internet,我希望按文件名以升序或降序對the List<String> files進行排序。 我希望能通過升序或降序的L ist<String> files文件的日期,我該怎麼辦?謝謝!如何在Android中按升序或降序按文件名或日期排序文件或文件夾?

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

回答

3

只需提供您的文件數組,並且它排序簡單。

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

演示:

@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

謝謝!給Sohail Zahid:但是你的代碼不起作用 – HelloCW

+0

錯誤的第二個參數類型。發現:'java.util.Comparator ',必需:'java.util.Comparator <? super java.lang.Object>' – HelloCW

+0

請顯示你如何使用這段代碼? –

2

您可以使用如下的排序基於文件名和更改日期等比較該值。或者乾脆用ApacheCommons,它會給直接的API

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; 
      } 
} 
相關問題