根据文件路径获取路径下的文件和文件夹,遍历删除文件,遍历删除文件夹

给定一个指定的路径,遍历这个路径下的所有文件和文件夹,并分类。

 删除3天前的文件和空文件夹。

package com.cknow.schedule.cronjobs;

import com.cknow.beans.config.FileImageConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Component
@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class ScheduleTaskDeleteFiles {

    @Autowired
    private FileImageConfig fileImageConfig;

    /**
     * 定时删除临时文件夹下的文件
     * <p>
     * {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
     */
    @Scheduled(cron = "5 * * * * ?") //5秒钟执行一次
    private void deleteFileTasks() {
        //String tempPath = fileImageConfig.getImageTempFolder();
        String tempPath = "D:\\cknow\\temp_dev";
        ArrayList<File> fileList = new ArrayList<File>();
        ArrayList<File> fileDirectoryList = new ArrayList<File>();
        Map<String,ArrayList<File>> map = getFilesAndDirectory(fileList,fileDirectoryList,tempPath);
        ArrayList<File> fileListResult = map.get("fileList");
        ArrayList<File> fileDirectoryListResult = map.get("fileDirectoryList");

        System.out.println(fileListResult.size());
        System.out.println(fileDirectoryListResult.size());

        deleteFiles(fileListResult);
        deleteDirectory(fileDirectoryListResult);
    }

    /**
     * 方法getFilesAndDirectory根据指定路径获取所有的文件和文件夹
     */
    private Map<String,ArrayList<File>> getFilesAndDirectory(ArrayList<File> fileList, ArrayList<File> fileDirectoryList, String path) {
        try {
            //目标集合fileList
            File file = new File(path);
            if (file.isDirectory()) {
                File[] files = file.listFiles();
                for (File fileIndex : files) {
                    //如果这个文件是目录,则进行递归搜索
                    if (fileIndex.isDirectory()) {
                        //fileDirectoryList.add(fileIndex);//由最外层到最内层,不利于删除
                        getFilesAndDirectory(fileList,fileDirectoryList,fileIndex.getPath());
                        fileDirectoryList.add(fileIndex);//由最内层到最外层
                    } else {
                        //如果文件是普通文件,则将文件句柄放入集合中
                        fileList.add(fileIndex);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        Map<String,ArrayList<File>> map = new HashMap<>();
        map.put("fileList",fileList);//文件集合
        map.put("fileDirectoryList",fileDirectoryList);//文件夹集合
        return map;
    }

    /**
     * 删除文件
     * @param files
     */
    private void deleteFiles(ArrayList<File> files){
        if (files == null || files.size() == 0){
            return;
        }
        Long currentTime = System.currentTimeMillis();
        for (int i = 0; i < files.size(); i++) {
            File file = files.get(i);
            Long lastModified = file.lastModified();

            System.out.print(lastModified);
            Date date = new Date(lastModified);
            System.out.print("\t");
            System.out.print(date);
            System.out.print("\t");

            Long cha = currentTime - lastModified;
            double result = cha * 1.0 /(1000*60*60);
            System.out.print("cha="+result);
            System.out.print("\t");
            System.out.println("删除文件="+file.getPath());
            if (result >= 72 ){//大于72小时,删除文件;就是删除3天前的文件
                file.delete();
            }

        }
    }

    /**
     * 删除文件夹
     * @param directory
     */
    private void deleteDirectory(ArrayList<File> directory){
        if (directory == null || directory.size() == 0){
            return;
        }
        for (int i = 0; i < directory.size(); i++) {
            File file = directory.get(i);
            if(file.isDirectory()){
                if (file.list().length > 0){
                    System.out.println("目录下不为空,不删除"+file.getPath());
                } else {
                    System.out.println("目录下为空,删除"+file.getPath());
                    file.delete();
                }
            }
        }
    }

    public static void main(String[] args) {
        new ScheduleTaskDeleteFiles().deleteFileTasks();
    }
}

如果你觉得对你有帮助,请支持一下。☺

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值