0

我有一个保存在手机上的备份目录,但我无法计算出删除除最后三个之外的所有备份的逻辑。

就目前而言,我有:

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 个?

任何指导将不胜感激。

4

5 回答 5

4

将所有File对象存储在 a 中List<File>并使用自定义对它们进行排序Comparator,以便它们按“lastModified”排序。

最后,从列表中选择最后三个项目(或前三个,取决于您的排序顺序)。

于 2013-10-25T12:35:35.930 回答
2

您可以按修改日期对文件数组进行排序:

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());
    }
});
于 2013-10-25T12:37:34.243 回答
0

使用 Comparator,您可以轻松实现在所需目录中获取最后三个修改文件的要求。

于 2013-10-25T12:49:50.310 回答
0

这篇文章展示了如何按修改日期列出文件;一旦你这样做,你可以很容易地找到最后三个:

在Java中列出文件的最佳方法,按修改日期排序?

于 2013-10-25T12:36:49.113 回答
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;
        };
    }
于 2020-08-29T13:54:47.990 回答