使用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();
            }
        }
    }
}
使用java程序完成大量文件目录拷贝工作的更多相关文章
- 2017年 Java 程序员,风光背后的危机
		不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ... 
- Java程序员如何在竞争中保持优势
		Java程序员入门容易,进阶很难,想要在竞争中保持优势,脚踏实地的同时也要仰望星空规划自己的未来.时间在流逝,年龄在增加,你期望的薪水也在不断增多,你总得让自己能力持续增加以配得上想要的收入吧. 从初 ... 
- MySQL与Oracle之间互相拷贝数据的Java程序
		因为工作需要,先是需要将一个小型的MySQL数据库中的数据拷贝到Oracle中:近期又有需要将一个中型的Oracle数据库拷贝到MySQL中.曾经找过网上各种转换工具,大多收费的,自己写个吧,还一切可 ... 
- 【转】优秀的Java程序员必须了解GC的工作原理
		一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ... 
- 优秀Java程序员必须了解的GC工作原理
		一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ... 
- 正式工作的前奏——一个Java程序员的实习总结(1)
		不知不觉,到深圳实习已经三个礼拜了.跟在暑假的三个半月实习不一样,这次收获更多,感受更好,算是摆脱了那次实习给我带来的阴影(这个会放到以后才说). 在知乎上,有这么一个问题,你现在最想跟刚工作时的你说 ... 
- 工作了3年的JAVA程序员应该具备什么技能?(zhuan)
		http://www.500d.me/article/5441.html **************************************** 来源:五百丁 作者:LZ2016-03-18 ... 
- 优秀Java程序员必须了解的GC工作原理(转)
		一个优秀的Java程序员必须了解GC(Garbage Collection 垃圾收集)的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系 ... 
- java程序的工作原理
		Sun公司设计java语言的目标是让Java程序不必经过修改就可以在各种各样的计算机(包括PC机和工作站)上运行.为了实现这一目标,Sun公司提供了一阵Java虚拟机(Java Virtual Mac ... 
随机推荐
- Git 的基本命令的使用
			1.获得Git仓库(克隆一份代码到本地仓库) git clone url 2.更新本地的代码 git pull 3.查看本地修改的文件 git status 4.将本地的修改加到stage中 git ... 
- MATLAB中拟合算法刚入门
			%%%1.拟合问题:(做预测,主要使用的范围是样本比较小,拟合效果会好,样本比较多,拟合的效果就不是很好) 1.应用预测的场景:已经知道10年的样本,预测第11年以内的数据 2.用拟合的到关系式:样本 ... 
- RHCSA 第二天
			1.Linux中的文件类型以及符号的表示 (1) 普通文件: 使用 ls -l 命令后,第一列第一个字符为 "-" 的文件为普通文件,如上图所示,普通文件一般为灰色字体,绿色字体的 ... 
- Java集合-LinkedList源码分析
			目录 1.数据结构-链表 2.ArrayList结构特性 3.构造方法 4.成员变量 5.常用的成员方法 6.Node节点 7.序列化原理 8.迭代器 9.总结 1.数据结构-链表 链表(Linked ... 
- 【刷题-LeetCode】236. Lowest Common Ancestor of a Binary Tree
			Lowest Common Ancestor of a Binary Tree Given a binary tree, find the lowest common ancestor (LCA) o ... 
- linux中shell编程 -->三剑客习题汇总
			目录 1.找出/proc/meminfo文件中以s开头的行,至少用三种方式忽略大小写 2.显示当前系统上的以root,centos或者user开头的信息 3.找出/etc/init.d/functio ... 
- Linux  安装和 连接xshell
			一.介绍和安装 /*一.linux:? 为什么要学习它. 常见的操作系统? 1.windows, linux,mac 使用命令行进行操作 Windows cmd Linux 和Mac 中的命令行是 s ... 
- springboot 配置mybatis  配置mapper.xml
			# 插件 进行配置 也可以用yml # 1. 配置 Tomcat 修改端口号 server.port=8848 server.context-path=/zxf #2.配置数据源 spring.dat ... 
- Elasticsearch (1) 文档操作
			本文介绍如何在Elasticsearch中对文档进行操作. 1.检查Elasticsearch及Kibana运行是否正常 在浏览器输入192.168.6.16:9200,有如下输出则说明Elastic ... 
- java实现跳过证书校验
			/** * 跳过证书效验的sslcontext * @return * @throws Exception */ private static SSLContext createIgnoreVerif ... 
