package com.test.xxx;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class test {
    static List<String> oks = new ArrayList<>();
    static List<String> fails = new ArrayList<>();

    public static void main(String[] args) throws InterruptedException {
        // 这里根据电脑配置实际的线程数
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(100);
        // 源文件根路径
        String baseDir = "C:\\Users\\Administrator\\Desktop";
        // 移动目标文件根路径
        String targetDir = "C:\\Users\\Administrator\\Desktop\\fj\\fj3";
        // 开始获取源文件根下面的所有文件并处理
        LinkedList<String> files = getAllFile(baseDir);
        System.err.printf("检测到 %d 个文件需要处理!\n", files.size());
        Thread.sleep(2000);
        for (String filepath : files) {
            fixedThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    System.err.println(filepath);
                    // 分类并移动
                   // checkAndRemove(filepath, targetDir);
                }
            });
        }
        // 等待线程执行完成
        fixedThreadPool.shutdown();
        try {
            fixedThreadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 打印执行结果
        if (fails.size() != 0){
            System.err.println("以下路径移动失败:");
            for (String fail : fails) {
                System.err.println(fail);
            }
        }else{
            System.err.println("全部执行成功!");
        }

    }

    /**
     * 获取源文件夹下的文件并进行处理
     * @param directoryPath 源文件夹
     * @return
     */
    public static LinkedList<String> getAllFile(String directoryPath) {
        LinkedList<String> list = new LinkedList<String>();
        File baseFile = new File(directoryPath);
        if (baseFile.isFile() || !baseFile.exists()) {
            return list;
        }
        File[] files = baseFile.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                //list.add(file.getAbsolutePath());
                System.out.printf("检索目录:%s\n", file.getAbsolutePath());
                list.addAll(getAllFile(file.getAbsolutePath()));
            } else {
                list.add(file.getAbsolutePath());
            }
        }
        return list;
    }

    /**
     * 检测并移动文件
     * @param filepath 源文件路径
     * @param targetDir 目标根路径
     */
    public static void checkAndRemove(String filepath, String targetDir){
        // 根据规则检测文件并移动
        //System.out.println(filepath);
        // 根据路径规则归类
        String typedir = checkFile(filepath);
        // 取得文件名
        String fileNameNow = filepath.substring(filepath.lastIndexOf("\\")+1);
        //System.err.println(fileNameNow);
        // 根据规则拼接路径
        File subDirectory = new File(targetDir, typedir);
        // 实际路径拼接文件名,得到目标完整路径
        String tarfilepath=new File(subDirectory, fileNameNow).getAbsolutePath();
        //System.err.println(tarfilepath);
        // 这里根据路径规则,生成新的路径并移动过去(如果移动过去的文件路径不存在则会直接创建)
        Boolean ok = moveFileToTarget(filepath, tarfilepath);
        if(ok){
            oks.add(filepath);
        }else{
            fails.add(filepath);
        }
    }

    /**
     * 分类规则判断
     * @param filepath 全路径
     * @return
     */
    public static String checkFile(String filepath){
        // 分类规则判断,比如里面有js的移动到js文件夹里面去

        if(filepath.contains("js")){
            return "js";
        }
        return "";
    }

    /**
     * 移动文件并重命名
     * @param fileFullNameCurrent 源地址
     * @param fileFullNameTarget 目标地址
     * @return
     */
    public static Boolean moveFileToTarget(String fileFullNameCurrent,String fileFullNameTarget) {
        boolean ismove = false;

        File oldName = new File(fileFullNameCurrent);

        if (!oldName.exists()) {
            System.err.printf("要移动的文件不存在:%s!", fileFullNameCurrent);
            return ismove;
        }

        if (oldName.isDirectory()) {
            System.err.printf("要移动的文件是目录,不移动:%s!", fileFullNameCurrent);
            return false;
        }

        File newName = new File(fileFullNameTarget);

        if (newName.isDirectory()) {
            System.err.printf("移动到目标位置的文件是目录,不移动:%s!", fileFullNameCurrent);
            return false;
        }

        String pfile = newName.getParent();
        File pdir = new File(pfile);

        if (!pdir.exists()) {
            pdir.mkdirs();
            System.err.printf("要移动到目标位置文件的父目录不存在,创建:%s", pfile);
        }

        ismove = oldName.renameTo(newName);
        return ismove;
    }

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐