2016-07-29 43 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; 
      } 
} 
相关问题