10

我能够做到这一点:

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

我从stackoverflow的答案中复制了!

有没有办法列出文件好的“目录”(文件夹)并按字母倒序列出?......并通过相反的日期?

4

10 回答 10

28
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());
             }
    });
}
于 2012-09-13T15:27:26.170 回答
3

你可以使用下面的代码。为我工作。

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);
                }
            });
        }
于 2017-09-11T06:22:30.377 回答
3

我遇到了一个例外

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;
}});
于 2018-01-26T20:16:30.793 回答
2

指针:

File.isDirectory()

File.lastModified()
于 2012-09-13T15:22:41.287 回答
1

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

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()));
                        }
                    });
                }
于 2018-06-06T08:53:05.153 回答
1

如果你喜欢简洁:

File[] files = folder.listFiles();
Arrays.sort(files, (a, b) -> Long.compare(b.lastModified(), a.lastModified()));
于 2018-08-02T17:11:01.990 回答
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;
    }
}
}); 
于 2016-02-18T13:22:09.680 回答
0

在反向模式下按最后修改日期排序文件的正确方法是:

Arrays.sort(Files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 

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

于 2016-04-04T11:36:04.363 回答
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()值来解决我的问题。

于 2017-12-02T04:59:06.687 回答
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);
            }
        });
于 2021-05-08T11:29:45.877 回答