使用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();
}
}
}
}
作者: dawa大娃bigbaby
出处:https://www.cnblogs.com/dawabigbaby/p/13750249.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!