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

java程序完成目录拷贝工作

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

Copy
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 @   dawa大娃bigbaby  阅读(263)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示