【问题标题】:Retain latest n files based on purge time根据清除时间保留最新的 n 个文件
【发布时间】:2016-07-26 22:16:42
【问题描述】:

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

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

【问题讨论】:

    标签: java file purge


    【解决方案1】:

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

    【讨论】:

    • Johannisk,感谢您的及时回复。它的工作。
    • 没问题,我不确定 System.arraycopy 是否是跳过前 10 个文件的理想方式。如果有更好的方法请指正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多