【问题标题】:Android: how to get a directory list ordered by name or by date descending?Android:如何获取按名称或按日期降序排列的目录列表?
【发布时间】:2012-09-13 15:16:33
【问题描述】:

我能做到:

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

我从stackoverflow的答案中复制!

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

【问题讨论】:

  • 我什么都没试过……

标签: android file


【解决方案1】:
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());
             }
    });
}

【讨论】:

  • 哇!!!!以及比较 lastmodified 日期的方法是什么?或创建日期,相同...
  • lastmodifed 返回一个 long。所以你必须在比较中使用“>”
  • 只是对黑带代码的修改:我必须删除@override ...我不知道为什么,但eclipse告诉我删除...我已经删除了
  • 可能是因为您的目标是 java 1.5
  • 同理。检查eclipse项目属性
【解决方案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】:

    我遇到了异常

    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】:

      指针:

      File.isDirectory()
      
      File.lastModified()
      

      【讨论】:

      • 谢谢! lastModified 帮我解决后半段问题
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        如果你喜欢简洁:

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

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

            Arrays.sort(Files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 
            

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

            【讨论】:

              【解决方案9】:

              我用这个解决了这个问题

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

              【讨论】:

                【解决方案10】:

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

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-06-17
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-02-08
                  相关资源
                  最近更新 更多