1

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

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>)Arrays 类型中的方法不适用于参数(String[], Comparator<File>)

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

4

3 回答 3

2

要么更改您的列表以包含File对象,要么更改您的比较器以对String对象进行操作。

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

评论中所述,您可以使用对列表进行排序,Collections.sort()因此无需转换为数组。

于 2013-07-10T12:21:25.930 回答
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)。

于 2013-07-10T12:29:20.673 回答
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;
    }
于 2018-07-06T00:33:28.953 回答