根据清除时间保留最新的 n 个文件

Retain latest n files based on purge time

我试过如何根据天数保留文件。这就是这样做的逻辑。

public static void purgeFiles(int daysToRetain, String directory){

    File backupDir = new File(directory);
    long purgeTime = System.currentTimeMillis() - (daysToRetain * 24L * 60L * 60L * 1000L);
    if(backupDir.exists()){
        File[] listOfBackupFiles = backupDir.listFiles();
        for(File backupFile : listOfBackupFiles){
            if(backupFile.lastModified() < purgeTime){
                if(backupFile.isFile()){
                    System.out.println(backupFile.getName()+" is going to delete");
                    backupFile.delete();
                }
        }

    }

}

}    

这里我有疑问,如何在一个目录中保留最新的10个文件。文件创建日期和时间不同。

创建文件没有固定的时间。文件不会每天、每周或每月创建。一个文件将在 2 天内创建,其他文件将在 5 天内创建。

所以,我想保留最近的 10 个文件。

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

您可以使用比较器按修改日期对数组进行排序。 然后,只需检查数组是否大于 10,并对 10 之后的所有项目执行代码。

示例:

import java.io.File;
    import java.util.Arrays;
    import java.util.Comparator;

    public class PurgeFiles
    {

        public static void main(String[] args)
        {
            purgeFiles(10, 10, "C:/testdir/");
        }

        public static void purgeFiles(int daysToRetain, int filesToRetain, String directory)
        {

            File backupDir = new File(directory);
            long purgeTime = System.currentTimeMillis() - (daysToRetain * 24L * 60L * 60L * 1000L);
            if (backupDir.exists())
            {
                File[] listOfBackupFiles = backupDir.listFiles();

                Arrays.sort(listOfBackupFiles, new Comparator<File>()
                {
                    public int compare(File f1, File f2)
                    {
                        return Long.valueOf(f2.lastModified()).compareTo(f1.lastModified());
                    }
                });

                if(listOfBackupFiles.length > filesToRetain){
                    File[] listOfBackupFilesToCheckForDeletion = new File[listOfBackupFiles.length - filesToRetain];
                    System.arraycopy(listOfBackupFiles, filesToRetain, listOfBackupFilesToCheckForDeletion, 0, listOfBackupFiles.length - filesToRetain);

                    for (File backupFile : listOfBackupFilesToCheckForDeletion)
                    {
                        if (backupFile.lastModified() < purgeTime)
                        {
                            if (backupFile.isFile())
                            {
                                System.out.println(backupFile.getName() + ", " + backupFile.lastModified() + " is going to delete");
                                backupFile.delete();
                            }
                        }
                    }
                }
            }
        }
    }