我有一个保存在手机上的备份目录,但我无法找到除去最后三个以外的所有逻辑。
现在我有:
public static void checkLocalBackup(){
String path = Global.backupSingleLocalLocation;
Log.d("Files", "Path: " + path);
File f = new File(path);
File file[] = f.listFiles();
for (int i=0; i < file.length; i++)
{
Log.d("Files", "FileName:" + file[i].lastModified());
//sudo code
if(isNotInLastThreeFiles){
deleteFile(file[i]);
}
}
}
这会循环并列出所有最后修改过的文件,但我无法找出如何选择最旧的文件并保留最新的3个文件?
任何指导都会非常感激。
答案 0 :(得分:4)
将所有File
个对象存储在List<File>
中,并使用自定义Comparator
对其进行排序,以便按“lastModified”排序。
最后,从列表中选择最后三项(或前三项,具体取决于您的排序顺序)。
答案 1 :(得分:1)
您可以按修改日期对文件数组进行排序:
File[] files = folder.listFiles();
Arrays.sort(files, new Comparator<File>(){
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
}
});
答案 2 :(得分:0)
这篇文章展示了如何按修改日期列出文件;一旦你这样做,你可以很容易地找到最后三个:
答案 3 :(得分:0)
使用Comparator,您可以轻松实现将最后三个修改过的文件放在所需目录中的要求。
答案 4 :(得分:0)
// delete all except 10 latest files
deleteAllExcept(10);
private static void deleteAllExcept(int i) {
ArrayList<File> files = new ArrayList<>();
for(File file : new File(path_to_folder).listFiles()) {
files.add(file);
System.out.println(file.getName());
}
files.stream()
.filter((File p) -> p.getName().contains("."))
.sorted(getReverseLastModifiedComparator())
.skip(i)
.forEach(x -> ((File) x).delete());
}
private static Comparator<File> getReverseLastModifiedComparator() {
return (File o1, File o2) -> {
if (o1.lastModified() < o2.lastModified()) {
return 1;
}
if (o1.lastModified() > o2.lastModified()) {
return -1;
}
return 0;
};
}