使用多线程拷贝文件夹
import java.io.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;/*** 使用多线程拷贝文件夹* 不考虑目的地文件的唯一性。 不按源文件格式拷贝* 每个文件开一条线程去拷贝。最大不超过线程池数量,如果所有线程被占满* 就等待空闲出来的线程,再提交任务** @author silence*/
public class Silence2 {/*** 读取路径*/private static final File INFILE = new File("D:\\Tlias\\新建文件夹\\A210300635\\videosbaselesson");/*** 存储路径*/private static final File OUTFILE = new File("C:\\Users\\Administrator\\Desktop\\新建22)");/*** 线程池*/private static final ThreadPoolExecutor thread;/*** 多线程,线程数*/private static final int SIZE = 100;static {thread = new ThreadPoolExecutor(//核心线程SIZE,//最大线程SIZE,//等待时间2,//等待时间单位TimeUnit.SECONDS,//任务队列,int的最大值,超过的任务,都放到等待队列。new ArrayBlockingQueue<>(10),//线程工厂Executors.defaultThreadFactory(),//拒绝策略new ThreadPoolExecutor.AbortPolicy());}public static void main(String[] args) throws Exception {//判断文件路径ifFile(INFILE);//拷贝文件copyFile(INFILE);//关闭线程池thread.shutdown();}/*** 判断源文件路径* @param file 源文件路径*/private static void ifFile(File file) {//如果路径错误退出if (!file.exists()) {System.out.println("文件路径错误");System.exit(1);}//必须要一个文件夹路径if (!file.isDirectory()) {System.out.println("请传入文件夹路径");System.exit(1);}//文件夹里必须要有文件File[] files = file.listFiles();if (files.length == 0) {System.out.println("不能为空文件夹");System.exit(1);}}/*** 拷贝文件** @param file 文件路径*/private static void copyFile(File file) {File[] files = file.listFiles();for (File f : files) {if (f.isFile()) {while (true) {if (ifThread()) {//如果没有提交满就提交任务thread.submit(() -> {copyF(f);});break;}}} else {//递归copyFile(f);}}}/*** @return true 代表线程池可以接受任务,可以提交*/private static boolean ifThread() {//正在执行的线程数量int activeCount = thread.getActiveCount();//返回允许的最大线程数。int maximumPoolSize = thread.getMaximumPoolSize();//正在执行的线程数量 < 最大线程数 + 等待队列数量6return activeCount < maximumPoolSize;}/*** 拷贝文件** @param f 文件路径*/private static void copyF(File f) {try {System.out.println(getThreadName() + " 正在读取:" + f.getName() + " 文件大小: " + f.length() + " 字节");BufferedInputStream input = new BufferedInputStream(new FileInputStream(f));BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(OUTFILE, f.getName())));byte[] arr = new byte[1024];int len;while ((len = input.read(arr)) != -1) {out.write(arr, 0, len);}input.close();out.close();System.out.println(getThreadName() + " 完成读取:" + f.getName());} catch (Exception e) {System.out.println(getThreadName() + f.getName() + "文件读取过程中发生错误");e.printStackTrace();System.exit(1);}}/*** 分割线程名*/private static String getThreadName() {String name = Thread.currentThread().getName();return "线程: " + name.substring(name.lastIndexOf("-") + 1);}
}
使用多线程拷贝文件夹相关推荐
- java 多线程 压缩_Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)...
线程模型 生产者Provider线程为一,主要进行深搜目录文件:. 消费者Consumer线程多个, 因为RPC服务调用时延较长, 启用多个线程请求服务. 持久化线程Persist 将已经消费的消息存 ...
- EVC实现拷贝文件夹下所有文件
//======================================================================== //TITLE: // EVC实现拷贝文件夹 ...
- linux拷贝文件夹怎么删除,linux文件及文件夹拷贝移动删除
linux文件及文件夹拷贝移动删除 文件拷贝 文件夹拷贝 文件拷贝并重命名 文件夹拷贝并重命名 文件移动 文件夹移动 文件移动并重命名 文件夹移动并重命名 文件删除 文件夹删除 文件拷贝 cp tes ...
- java中拷贝文件的代码_拷贝文件夹中的所有文件到另外一个文件夹
[java]代码库/** * * 拷贝文件夹中的所有文件到另外一个文件夹 * * @param srcDirector * 源文件夹 * * @param desDirector * 目标文件夹 * ...
- Java io流---拷贝文件夹下的所有文件和目录
Java io流-拷贝文件夹下的所有文件和目录 代码: package demo01;import java.io.*; import java.util.TreeMap;public class C ...
- java 拷贝文件夹的实现
public class CopyFiles {public static void main(String[] args) throws Exception {String src = " ...
- java 多线程 扫描,多线程扫描文件夹耗时方法分析
在这里Java的方法中有线程递归,不懂得用什么方法求运行时间遇到一个有趣的问题,多线程扫描文件夹求运行时间.一般这种扫描文件夹耗时好像都是用的递归遍历一下进行计时,头一次看到这种一个文件夹一个线程的, ...
- Linux拷贝文件夹
参考博文: linux下cp目录时排除一个或者多个目录的方法 1. cp cp -r 和-R功能上是等价的.不加-r或者-R的时候,只拷贝文件,不拷贝文件夹:加上后则会拷贝文件夹--包括下一级的子文件 ...
- java 包含文件_java 文件夹拷贝(文件夹里包含文件和文件夹) 代码
java代码实现文件夹拷贝,文件夹可能包含文件夹和文件import java.io.BufferedReader; import java.io.File; import java.io.FileIn ...
最新文章
- 来聊聊可形变卷积及其应用
- 实验二十二 SCVMM中的SQL Server配置文件
- python爬虫教程网-python爬虫入门10分钟爬取一个网站
- redis 数据类型、命令
- mysql传不进去汉字,Mysql下插入汉字失败
- rstudio的数据集怎么建立和保存_这个40M的小工具助你在windows下处理数据如虎添翼...
- Error in callback for watcher “value“: “TypeError: Cannot read property ‘repalce‘ of null“
- 解决C#网络通信编程的阻塞问题
- StringUtils简单判断字符串是否为null或者空字符串
- 电脑主机前面的耳机插孔没声音怎么办
- 刷网课seleinum 小程序
- oppo手机解锁_oppo手机密码解锁大全【图文】
- 网络编程 udp学习笔记补充(帅帅老师讲堂)
- “金三银四” “阿里” 我去定了,谁也拦不住我,这份《Android面试宝典》说的
- Camera Surface 从应用到cameraserver的流转
- Educational Codeforces Round 49 (Rated for Div. 2)切题报告
- 按关键字搜索易贝商品 API
- 建网站论坛需要多大服务器,论坛搭建如何选择服务器
- Typora主题推荐及资源
- 南邮 OJ 1446 嘉娃的难题