Reputation: 2255
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
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
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
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