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

时间:2015-04-24 14:04:57

标签: java file purge

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

Required

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

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

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

1 个答案:

答案 0 :(得分:2)

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();
                            }
                        }
                    }
                }
            }
        }
    }