Java regularly cleans out expired files

Posted by fnbcprog on Sat, 07 Dec 2019 00:35:01 +0100

In a project, it is often necessary to automatically and regularly clean up some expired files. In fact, Java implementation is quite simple. There are two core parts, one is timing task, and the other is recursive deletion of files. However, the premise is that your files are placed in a folder named "2018-12-05", and the core code is directly displayed below:

1. Delete files recursively

/**
     * Recursively delete all files under the folder
     * @param file
     */
    public static void deleteFile(File file) {
        if (file.isDirectory()) {
            //Recursively delete all files under the folder
            File[] files = file.listFiles();
            for (File f : files) {
                deleteFile(f);
            }

            //Delete folder itself
            if (file.listFiles().length == 0) {
                logger.info("Delete folder:[{}]", file);
                file.delete();
            }
        } else {
            // If it's a file,Just delete yourself
            logger.info("To delete a file:[{}]", file);
            file.delete();
        }
    }

 

2. Scheduled tasks

@Component
public class FileJob {

    private static final Logger logger = LoggerFactory.getLogger(FileJob.class);

    @Scheduled(cron = "0/1 * * * * *")
    public void clean() throws ParseException {
        logger.info("Start deleting files...");
        long startTime = System.currentTimeMillis();

        //Delete files
        File deleteFile = new File("xxx");
        File[] deleteFiles = deleteFile.listFiles();
        for (File file : deleteFiles) {
            Date createDate = new SimpleDateFormat("yyyy-MM-dd").parse(file.getName());
            //Delete files 15 days ago
            if (new Date().compareTo(DateUtil.getDateIn(DateUtil.DAY, 15, createDate)) > 0) {
                FileUtil.deleteFile(uploadFile);
            }
        }

        logger.info("End of delete file,Total time consumption:[{}]Millisecond", System.currentTimeMillis() - startTime);
    }

}

 

Do you think it's easy! Then try it by yourself!

Topics: Java