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

时间:2012-09-13 15:16:33

标签: android file

我能够做到这一点:

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

我是从stackoverflow的答案中复制过来的。

有没有办法listFile ok kind“目录”(文件夹)并按反向字母顺序列出? ......还有反向日期?

10 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:2)

指针:

File.isDirectory()

File.lastModified()

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

我得到了一个例外

IllegalArgumentException:比较方法违反了其一般合同!

所以我使用了它,它运作正常:

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

答案 4 :(得分:1)

如果您希望简洁:

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

答案 5 :(得分:0)

如果你想按日期排序,那么选择下面的代码,如果你想要名字,那么已经回答如上:)

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

答案 6 :(得分:0)

按逆向模式按上次修改日期订购文件的正确方法是:

Arrays.sort(Files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 

对于此指令,您将需要org.apache中的commons.io库,您可以从here下载

答案 7 :(得分:0)

我使用此

解决了这个问题
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()值,解决了我的问题。

答案 8 :(得分:0)

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

public void Execute(IServiceProvider serviceProvider)
{
    var executionContext = serviceProvider.GetService<IPluginExecutionContext>();
    var parentContext = executionContext.ParentContext;
    if (parentContext != null &&
        (parentContext.MessageName == "ExportToExcel" ||
         parentContext.MessageName == "ExportDynamicToExcel"))
    {
        // Place your logic here
    }
}

而不是

git clone

避免因语言环境更改和大/小写文件名导致的排序问题

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

答案 9 :(得分:0)

一种对文件数组进行排序的快速而优雅的方式,按日期的变化是:

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