当前位置: 代码迷 >> 综合 >> JAVA多线程进行压缩文件(线程池)(CountDownLatch)详解
  详细解决方案

JAVA多线程进行压缩文件(线程池)(CountDownLatch)详解

热度:80   发布时间:2023-12-07 20:39:55.0

先说说我要做的事情吧,上一遍我已经写出了这么把文件夹进行压缩成一个zip包,所以在这个文章的基础上面就可以实现,但是问题是我这边要弄一个批量的操作,就是一次下载很多文件然后放到目录中,在进行压缩,并且文件还是线上的文件,所以我的进行下载文件到本地,这里是很需要时间的,所以在下载线上的文件这里我想着用多线程去进行下载,然后一次去进行压缩文件,好了看看代码吧

       String realPath = new File(request.getSession().getServletContext().getRealPath("/")).getParent(); //获取项目路径String mrker = realPath+"\\"+"合同文件"; //要创建的目录名字//线程池ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10,10,1L,TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(3), Executors.defaultThreadFactory(),new ThreadPoolExecutor.DiscardOldestPolicy());for(int i=0;i<batchSignOrderList.size();i++){ //循环 因为有很多文件夹要进行下载Map<String, Object> map = batchSignOrderList.get(i); //获取map 对象 然后在拿值String contractName = map.get("contract_name").toString(); //文件名字 我们的文件是 本地保存过名字 然后拼接域名的直接就可以访问 比如 121212121212.pdfString url = "http://xxxxxxxxx.cn/temp/"+contractName; //这样就可以访问文件 然后下载String filePath = toUtf8String(url); //给访问路劲进行 编码 防止中文 访问threadPool.execute(new CarMergePdfFilesCallable(filePath, map.get("batchNo").toString(), mrker)); //执行下载文件方法}//创建文件 zipString newzip = ZipFileUtils.createNewzip(realPath + "\\" + "待签约合同文件" + ".zip");//文件加入  FileOutputStreamFileOutputStream fos1 = new FileOutputStream(new File(newzip));ZipFileUtils.toZip(mrker, fos1,true); //进行生成 zip文件夹download(response,newzip); //这里是文件
  相关解决方案