如何在 Android 中按文件名或日期按升序或降序对文件或文件夹进行排序?

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

以下示例代码来自网络,希​​望the List<String> files按文件名升序或降序排序。 我希望 List<String> files by date of file 升序或降序,我该怎么做?谢谢!

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

只需提供您的文件数组即可简单排序。

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

您可以像下面那样使用基于文件名的排序并更改日期和其他比较的值。或者直接使用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;
          }
}

可能会晚回答 bt 此方法按修改日期的 desc 顺序排序文件

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