2016-07-29 6 views
1

次のサンプルコードはインターネットからのものです。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

あなたのFile配列を提供するだけで簡単に並べ替えることができます。

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

間違った第二引数型。 Found: '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; 
      } 
} 
関連する問題