Android:如何获取按名称或日期降序排序的目录列表



我可以这样做:

    File images = new File(path);  
    File[] imageList = images.listFiles(new FilenameFilter(){  
        public boolean accept(File dir, String name)  
        {  
            return name.endsWith(".jpg");
        }  
    });

我从堆栈溢出的答案中复制了!

有没有办法列出文件确定类型的"目录"(文件夹(并按反向字母顺序列出?...并且通过反向日期?

final File[] sortedFileName = images.listFiles()
if (sortedFileName != null && sortedFileName.length > 1) {
        Arrays.sort(sortedFileName, new Comparator<File>() {
             @Override
             public int compare(File object1, File object2) {
                return object1.getName().compareTo(object2.getName());
             }
    });
}

使用 Array.sort() 比较文件的名称。

编辑:使用此代码按日期排序

final File[] sortedByDate = folder.listFiles();
if (sortedByDate != null && sortedByDate.length > 1) {
        Arrays.sort(sortedByDate, new Comparator<File>() {
             @Override
             public int compare(File object1, File object2) {
                return (int) ((object1.lastModified() > object2.lastModified()) ? object1.lastModified(): object2.lastModified());
             }
    });
}

您可以使用以下代码。 为我工作。

final File[] files= file.listFiles();
if (files != null && files.length > 1) {
            Collections.sort(Arrays.asList(files), new Comparator<File>() {
                public int compare(File o1, File o2) {
                    long lastModifiedO1 = o1.lastModified();
                    long lastModifiedO2 = o2.lastModified();
                    return (lastModifiedO2 < lastModifiedO1) ? -1 : ((lastModifiedO1 > lastModifiedO2) ? 1 : 0);
                }
            });
        }

我遇到了异常

非法论证例外:比较方法违反其总合同!

所以我使用了这个,它工作正常:

Arrays.sort(filesList, new Comparator<File>() {
   @Override
   public int compare(File a, File b) {
      if(a.lastModified() < b.lastModified() )
         return 1;
      if(a.lastModified() > b.lastModified() )
         return -1;
      return 0;
}});

指针:

File.isDirectory()
File.lastModified()

如果您更喜欢简洁:

File[] files = folder.listFiles();
Arrays.sort(files, (a, b) -> Long.compare(b.lastModified(), a.lastModified()));

对于基于文件名的排序,添加

object1.getName().toLowerCase(Locale.getDefault())

而不是

object1.getName()

以避免由区域设置更改和大写/小写文件名引起的排序问题

             final File[] sortedFileName = images.listFiles();
                if (sortedFileName != null && sortedFileName.length > 1) {
                    Arrays.sort(sortedFileName, new Comparator<File>() {
                        @Override
                        public int compare(File object1, File object2) {
                            return object1.getName().toLowerCase(Locale.getDefault()).compareTo(object2.getName().toLowerCase(Locale.getDefault()));
                        }
                    });
                }

按更改日期对文件数组进行排序的一种快速而优雅的方法是:

        Arrays.sort(fileList, new Comparator<File>() {
            @Override
            public int compare(File f1, File f2) {
                return Long.compare(f1.lastModified(), f2.lastModified());
                // For descending
                // return -Long.compare(f1.lastModified(), f2.lastModified());
            }
        });

要对文件数组进行排序,请按名称排序

        Arrays.sort(fileList, new Comparator<File>() {
            @Override
            public int compare(File f1, File f2) {
                return f1.compareTo(f2);
                // For descending
                // return -f1.compareTo(f2);
            }
        });
如果要

按日期排序,请选择以下代码,如果您想要名称,则答案已经在:)之上

File f = new File("/home/myfiles");
File [] files = f.listFiles();
Arrays.sort( files, new Comparator(){
public int compare(Object o1, Object o2) {
    if (((File)o1).lastModified() > ((File)o2).lastModified()) {
        return -1;
    } else if (((File)o1).lastModified() < ((File)o2).lastModified()) {
        return +1;
    } else {
        return 0;
    }
}
}); 

在反向模式下按上次修改日期对文件进行排序的正确方法是:

Arrays.sort(Files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 

对于本说明,您将需要 org.apache 的 commons.io 库,您可以从此处下载

我用这个解决了这个问题

final File[] sortedByDate = folder.listFiles();
if (sortedByDate != null && sortedByDate.length > 1) {
        Arrays.sort(sortedByDate, new Comparator<File>() {
             @Override
             public int compare(File object1, File object2) {
                return (int) ((object1.lastModified() > object2.lastModified()) ? 0: 1);
             }
    });
}

返回 0 和 1 而不是解决我问题的lastModified()值。

现在,使用新的 android,您可以编写内联短脚本来执行此操作.
要比较文件名:

Arrays.sort(files, Comparator.comparing(File::getName));

要比较修改日期:

Arrays.sort(files, (object1, object2) -> (int) (Math.max(object1.lastModified(), object2.lastModified())));

最新更新