先说说我要做的事情吧,上一遍我已经写出了这么把文件夹进行压缩成一个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.pdf
String url = "http://xxxxxxxxx.cn/temp/"+contractName; //这样就可以访问文件 然后下载
String filePath = toUtf8String(url); //给访问路劲进行 编码 防止中文 访问
threadPool.execute(new CarMergePdfFilesCallable(filePath, map.get("batchNo").toString(), mrker)); //执行下载文件方法
}
//创建文件 zip
String newzip = ZipFileUtils.createNewzip(realPath + "\\" + "待签约合同文件" + ".zip");
//文件加入 FileOutputStream
FileOutputStream fos1 = new FileOutputStream(new File(newzip));
ZipFileUtils.toZ