使用java程序完成大量文件目录拷贝工作

java程序完成目录拷贝工作

背景描述:我目录有140多个,每个目录里面都有一个src目录。我现在想要所有的src目录移动到同一个目录中。


package com.util.cp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class CPfile {
    public static ExecutorService customerExecutorService = new ThreadPoolExecutor(10, 10, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
    ;

    public static void main(String[] args) throws Exception {
        File files = new File("D:\\XXX\\XXX\\项目目录");//项目存放目录
        File newFile = new File("D:\\src");//新目录
        cp1(files, newFile);
    }

    public static void cp1(File files, File newFile) throws Exception {
        int k = 0, j = 0;
        ArrayList<File> temp = new ArrayList<File>();
        temp.add(files);
        for (int i = 0; i < temp.size(); i++) {
            if (temp.get(i).isDirectory()) {
                File[] list = temp.get(i).listFiles();
                if (temp.get(i).getName().endsWith("src")) {
                    break;
                }
                for (File file2 : list) {
                    if (file2.isDirectory()
                            && !file2.isFile() && !file2.isHidden()
                            && !file2.getName().contains(".git")
                            && !file2.getName().contains(".idea")
                            && !file2.getName().contains("target")
                            && !file2.getName().contains("lib")
                            && !file2.getName().contains("aio")
                    ) {
                        temp.add(file2);
                    }
                }
            }
        }
        System.out.println(temp.size());
        Iterator<File> iterator = temp.iterator();
        while (iterator.hasNext()) {
            File file = (File) iterator.next();
            if (file.getName().contains("src")) {
                copy(file, newFile, true);
                k++;
                System.out.println(file);
            }
            j++;
        }
        System.out.println(k + "   " + j);
    }

    public static void copy(File f, File nf, boolean flag) throws Exception {
        // 判断是否存在
        if (f.exists()) {
            // 判断是否是目录
            if (f.isDirectory()) {
                if (flag) {
                    // 制定路径,以便原样输出
                    nf = new File(nf + "/" + f.getName());
                    // 判断文件夹是否存在,不存在就创建
                    if (!nf.exists()) {
                        nf.mkdirs();
                    }
                }
                flag = true;
                // 获取文件夹下所有的文件及子文件夹
                File[] l = f.listFiles();
                // 判断是否为null
                if (null != l) {
                    for (File ll : l) {
                        // 循环递归调用
                        copy(ll, nf, flag);
                    }
                }
            } else {
                System.out.println("正在复制:" + f.getAbsolutePath());
                System.out.println("到:" + nf.getAbsolutePath() + "\\" + f.getName());
                // 获取输入流
                FileInputStream fis = new FileInputStream(f);
                // 获取输出流
                FileOutputStream fos = new FileOutputStream(nf + "/" + f.getName());
                byte[] b = new byte[1024];
                // 读取文件
                while (fis.read(b) != -1) {
                    // 写入文件,复制
                    fos.write(b);
                }
                fos.close();
                fis.close();
            }
        }
    }

}

posted @ 2020-09-29 16:19  dawa大娃bigbaby  阅读(250)  评论(0编辑  收藏  举报