如何使用修改日期对文件进行排序?

时间:2013-07-10 12:17:29

标签: java android

我正在尝试以修改日期的数组排序获取目录中的文件列表。这是我正在使用的代码

public static void sortFilesByLastModifiedDate(ArrayList<String> myfiles) {
     String[] myfile = new String[myfiles.size()];
     myfile = myfiles.toArray(myfile);

     Comparator<File> comparator = new Comparator<File>() {
            @Override
            public int compare(File o1, File o2) {
                    return Long.valueOf(o1.lastModified()).
                            compareTo(o2.lastModified());
            }
        };
        Arrays.sort(myfile, comparator);

    }

Arrays.sort(myfile, comparator);控制台在此代码中显示错误 类型数组中的方法sort(T[], Comparator<? super T>)不适用于参数(String[], Comparator<File>)

请建议如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

更改列表以包含File个对象,或更改比较器以对String个对象进行操作。

我会推荐前一个选项。这允许您在将文件传递到比较器之前建立文件。请注意,如果文件不存在(可能是意外的),File.lastModified()将返回0

作为mentioned in the comments,您可以使用Collections.sort()对列表进行排序,因此您无需转换为数组。

答案 1 :(得分:0)

这意味着您无法比较File和String对象。 您可以将String和String比较为:

,而不是这样
Arrays.sort(myfile,new Comparator<String>() {

        @Override
        public int compare(String lhs, String rhs) {
            //todo: finish here.
            return Long.valueOf(new File(lhs).lastModified()).compareTo(new File(rhs).lastModified());                  
        }
    });

我认为您可以尝试使用文件名而不是直接使用文件对象。 在“比较”中,您加载要在内部进行比较的2个文件,并管理错误(如IOException)。

答案 2 :(得分:0)

这是用于根据修改日期对文件进行排序的代码。

private ArrayList<File> getListFiles(File parentDir) {
        ArrayList<File> inFiles = new ArrayList<File>();

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

        });

if (files != null) {
            for (File file : files) {

                    if (!inFiles.contains(file))
                        inFiles.add(file);
                }

        }

        return inFiles;
    }