【问题标题】:sorting files based on its creation date in android根据在android中的创建日期对文件进行排序
【发布时间】:2014-10-27 06:17:17
【问题描述】:

我想要基于我的创建日期的文件列表。 当我更新任何图像并尝试检索所有图像时,顺序会随机更改。

这是我的代码,

 File[] files = parentDir.listFiles();
    for (File file : files) {
// I am getting files here
    }

任何帮助..

【问题讨论】:

    标签: android file


    【解决方案1】:
        List<File> fileList = new ArrayList<File>();
        Collections.sort(fileList, new Comparator<File>() {
    
            @Override
            public int compare(File file1, File file2) {
                long k = file1.lastModified() - file2.lastModified();
                if(k > 0){
                   return 1;
                }else if(k == 0){
                   return 0;
                }else{
                  return -1;
               }
            }
        });
    

    【讨论】:

      【解决方案2】:

      我想要基于我的创建日期的文件列表。

      正如前面两个答案所指出的,您可以根据修改日期对文件进行排序:

      file.lastModified()
      

      但修改日期已更新,例如在重命名文件的瞬间。所以,这不能代表创建日期。

      不幸的是,创建日期不可用,因此您需要重新考虑您的基本策略:

      see an old answer of CommonsWare

      【讨论】:

        【解决方案3】:

        这是根据修改日期对文件进行排序的代码,因为创建日期不可用。

        File[] files = parentDir.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;
                }
            }
        
        });
        

        【讨论】:

          【解决方案4】:

          试试这个可能对你有帮助,

          public static void main(String[] args) throws IOException {
              File directory = new File(".");
              // get just files, not directories
              File[] files = directory.listFiles((FileFilter) FileFileFilter.FILE);
          
              System.out.println("Default order");
              displayFiles(files);
          
              Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
              System.out.println("\nLast Modified Ascending Order (LASTMODIFIED_COMPARATOR)");
              displayFiles(files);
          
              Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
              System.out.println("\nLast Modified Descending Order (LASTMODIFIED_REVERSE)");
              displayFiles(files);
          
          }
          
          public static void displayFiles(File[] files) {
              for (File file : files) {
                  System.out.printf("File: %-20s Last Modified:" + new Date(file.lastModified()) + "\n", file.getName());
              }
          }
          

          【讨论】:

          • 我试过这个代码。我尝试过重命名图像,在这种情况下,我再次丢失了原始订单。新重命名的图像排在最后。
          • 注意 LastModifiedFileComparator 在 Apache 的 Common IO 中可用。
          【解决方案5】:

          在 Kotlin 语言中可以这样写:

          private fun getListFiles(parentDir: File): MutableList<File> {
          
              val inFiles: MutableList<File> = parentDir.listFiles().toMutableList()
          
              inFiles.filter { it.extension == "jpg" }
          
              inFiles.sortByDescending({ it.lastModified()})
          
              return inFiles
          }
          

          【讨论】:

            【解决方案6】:

            伙计们,如果您无法解决这个LastModifiedFileComparator 问题,这是我找到的解决方案。

            第 1 步
            打开应用级别build.gradle 并添加如下依赖项。获取更新版本点击here

            implementation group: 'commons-io', name: 'commons-io', version: '2.0.1'
            

            第 2 步
            如果它不起作用,则添加 mavenCentral() 在您的应用级别创建新的 repositories build.gradle

            repositories{
               mavenCentral()
            }
            dependencies {
            //all implementation
            

            这一切都应该像魅力一样工作,如果不是,请参考这里

            【讨论】:

              【解决方案7】:

              1.将其添加到 build.gradle 中:

                  implementation group: 'commons-io', name: 'commons-io', version: '2.4'
              

              2.在活动中添加代码:

                File[] folderFiles = Files.listFiles();
              
                // Sort files in ascending order base on last modification
                Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
              
                // Sort files in descending order base on last modification
                Arrays.sort(folderFiles, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
              

              【讨论】:

                【解决方案8】:

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

                        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
                  • 2023-02-22
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-09-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多