zoukankan      html  css  js  c++  java
  • 使用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();
                }
            }
        }
    
    }
    
    
  • 相关阅读:
    应用系统数据缓存设计
    解密SVM系列(二):SVM的理论基础(转载)
    机器学习6—SVM学习笔记
    机器学习5—logistic回归学习笔记
    Win7 64bit+Anaconda(3-5.0.1,Python3.6)+Pycharm(community-2017.3.3)+OpenCV(python‑3.4.0‑cp36‑cp36m)(转载)
    AI关注的网址
    机器学习4—朴素贝叶斯学习笔记
    机器学习3—决策树学习笔记
    机器学习2—K近邻算法学习笔记
    windows_64下python下载安装Numpy、Scipy、matplotlib模块
  • 原文地址:https://www.cnblogs.com/bigbaby/p/13750249.html
Copyright © 2011-2022 走看看