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程序完成大量文件目录拷贝工作的更多相关文章

  1. 2017年 Java 程序员,风光背后的危机

    不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ...

  2. Java程序员如何在竞争中保持优势

    Java程序员入门容易,进阶很难,想要在竞争中保持优势,脚踏实地的同时也要仰望星空规划自己的未来.时间在流逝,年龄在增加,你期望的薪水也在不断增多,你总得让自己能力持续增加以配得上想要的收入吧. 从初 ...

  3. MySQL与Oracle之间互相拷贝数据的Java程序

    因为工作需要,先是需要将一个小型的MySQL数据库中的数据拷贝到Oracle中:近期又有需要将一个中型的Oracle数据库拷贝到MySQL中.曾经找过网上各种转换工具,大多收费的,自己写个吧,还一切可 ...

  4. 【转】优秀的Java程序员必须了解GC的工作原理

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...

  5. 优秀Java程序员必须了解的GC工作原理

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...

  6. 正式工作的前奏——一个Java程序员的实习总结(1)

    不知不觉,到深圳实习已经三个礼拜了.跟在暑假的三个半月实习不一样,这次收获更多,感受更好,算是摆脱了那次实习给我带来的阴影(这个会放到以后才说). 在知乎上,有这么一个问题,你现在最想跟刚工作时的你说 ...

  7. 工作了3年的JAVA程序员应该具备什么技能?(zhuan)

    http://www.500d.me/article/5441.html **************************************** 来源:五百丁 作者:LZ2016-03-18 ...

  8. 优秀Java程序员必须了解的GC工作原理(转)

    一个优秀的Java程序员必须了解GC(Garbage Collection 垃圾收集)的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系 ...

  9. java程序的工作原理

    Sun公司设计java语言的目标是让Java程序不必经过修改就可以在各种各样的计算机(包括PC机和工作站)上运行.为了实现这一目标,Sun公司提供了一阵Java虚拟机(Java Virtual Mac ...

随机推荐

  1. 如何向内核提交补丁?——FirstKernelPatch

    参考 https://kernelnewbies.org/FirstKernelPatch

  2. RHCSA 第二天

    1.Linux中的文件类型以及符号的表示 (1) 普通文件: 使用 ls -l 命令后,第一列第一个字符为 "-" 的文件为普通文件,如上图所示,普通文件一般为灰色字体,绿色字体的 ...

  3. 《剑指offer》面试题58 - II. 左旋转字符串

    问题描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两 ...

  4. Java构造器(构造方法)

    类中的构造器也成为构造方法,是在进行创建对象的时候必须调用的,并且构造器有以下两个特点: 1.必须和类名字相同 2.必须没有返回类型也不能写void public class Demo06 { //一 ...

  5. golang中接口对象的转型

    接口对象的转型有两种方式: 1. 方式一:instance,ok:=接口对象.(实际类型) 如果该接口对象是对应的实际类型,那么instance就是转型之后对象,ok的值为true 配合if...el ...

  6. java-异常概述及体系

    1 package p1.exception; 2 3 4 /* 5 * 异常:是在运行时期发生的不正常情况. 6 * 7 * 8 * 在java中用类的形式对不正常情况进行了描述和封装对象. 9 * ...

  7. 西安腾讯DevOps面试题python算法输出列表数值下界

    给定一个列表,然后给一个目标值,列表中两数求和等于目标值,要求输出列表两数的下界 如 list = [1,2,3,4,6,7,8] num=10 #!/usr/bin/python #coding=u ...

  8. CSS之常见布局|常用单位|水平垂直居中

    常见布局: 1. 流式布局:百分比布局,宽高.margin.pinding都是百分比 2. 固定布局:盒子的宽高固定,如:margin.padding等 3. 浮动布局:float 4. 弹性布局:f ...

  9. Mac 常用的 20 款效率神器推荐

    01.IntelliJ IDEA -- JetBrains 系列产品 02.GoLand -- JetBrains 系列产品 03.Alfred 04.Google Chrome 05.iTerm2 ...

  10. .NET6: 开发基于WPF的摩登三维工业软件

    MS Office和VisualStudio一直引领着桌面应用的时尚潮流,大型的工业软件一般都会紧跟潮流,搭配着Ribbon和DockPanel风格的界面.本文将介绍WPF下两个轻量级的Ribbon和 ...