Search code examples
androidfilesortingfilesort

How to sort file or folder by filename or date at ascending or descending in Android?


The following sample code is from Internet, I hope to sort the List<String> files by filename at ascending or descending. I hope to the List<String> files by date of file at ascending or descending, how can I do ? Thanks!

The same quetsion with 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);

Solution

  • Just provide your File array and it sort simple.

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