删除目录中除最后3个已修改文件之外的所有文件

时间:2013-10-25 12:31:42

标签: java android delete-file

我有一个保存在手机上的备份目录,但我无法找到除去最后三个以外的所有逻辑。

现在我有:

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

任何指导都会非常感激。

5 个答案:

答案 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)

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

Best way to list files in Java, sorted by Date Modified?

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