HelloCW
HelloCW

Reputation: 2255

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

Upvotes: 1

Views: 5607

Answers (3)

Rachit Vohera
Rachit Vohera

Reputation: 745

Might be late to answer bt this method sort files by desc order by modified date

File[] listFile = dir.listFiles();
Arrays.sort(listFile, new Comparator<File>() {
            @Override
            public int compare(File o1, File o2) {
                return Long.compare(o2.lastModified(), o1.lastModified());
            }
        });

Upvotes: 0

Sohail Zahid
Sohail Zahid

Reputation: 8149

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

Upvotes: 3

Jetti Madhu
Jetti Madhu

Reputation: 1068

You can use like below for sorting based on file name and change that value for date and other comparision. Or simply use ApacheCommons, it will give direct APIs

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

Upvotes: 3

Related Questions