我正在尝试以修改日期的数组排序获取目录中的文件列表。这是我正在使用的代码
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>)
请建议如何解决这个问题?
答案 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;
}