多线程结合线程池方式对文件批量下载到本地和压缩文件到浏览器

1.批量下载到本地:

首先先了解Executorsc创建的4中线程池的使用:

1)newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需 要,可灵活回收空闲线程,若无可回收,则新建线程。

2)newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

3)newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

4)newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。 

 

      

    /**
     * 下载附件
     * @param
     * @return
     */
    @Override
    public void fuJianDownLoad() {
        List<Twtpzj_sbxx> list =sbxxMapper.listSbxxIds(RxrcUtil.getCurrentYear());
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(9);
            for (Twtpzj_sbxx sbxx : list) {
                final String  id = sbxx.getId();
                fixedThreadPool.execute(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("当前线程:"+Thread.currentThread().getName());
                        System.out.println(id);
                        System.out.println("========================================");
                         //文件下载
                        downFiles(id);
                    }

                });
            }
        fixedThreadPool.shutdown();
    }

 

*****
 String path ="/downfile/附件/"+sbxx.getName().trim(); //所创建文件目录
                File f = new File(path);
                if(!f.exists()){
                    f.mkdirs(); //创建目录
                }
***

   List<Map> listFile=(List) maps.get("fileList");
                    if(listFile.size()>1){
                        for(int j=0;j<listFile.size();j++){
                            Map map = listFile.get(j);
                           byte[] buffer = Axis2Util.decode(map.get("fileBase64").toString());
                            FileOutputStream fos = null;
                            File file = new File(f, (i+1)+"."+dto.getDza016Name()+(j+1));
                            fos = new FileOutputStream(file);
                            fos.write(buffer, 0, buffer.length);
                            fos.close();

                        }
                    }else{
                        for(Map map:listFile){
                         byte[] buffer = Axis2Util.decode(map.get("fileBase64").toString());
                            FileOutputStream fos = null;
                            File file = new File(f, (i+1)+"."+dto.getDza016Name().toString());
                            fos = new FileOutputStream(file);
                            fos.write(buffer, 0, buffer.length);
                            fos.close();
                        }
                    }

-----------------------

2.浏览器输出

前端:

后端实现:

 

 

 

zos.flush()一定要放在for循环外面;不然的话只能压缩出来的里面只有一份文件,并不能多份文件
ze = new ZipEntry(twtpzjSbxx.getName()+"/"+(i+1)+"."+dto.getDza016Name()+"."+map.get("dzg006"));
其中"/"前面为压缩包里面的文件夹名称,最后一个“.” 是要带文件后缀
zhuaxia 可以从 xiami.com music.163.com 下载 MP3 文件音频。zhuaxia 是一个基于命令行的虾米音乐 ( www.xiami.com 以下简称[虾])网易云音乐( music.163.com 以下简称[易]) 多线程批量下载工具zhuaxia 的开发调试环境:python 2.7.6依赖requests modulemutagen modulebeautifulsoup4 module特性自动识别解析URL. 目前支持:[虾] 歌曲,专辑,精选集,用户收藏[todo], 歌手热门[易] 歌曲,专辑,歌单,歌手热门下载歌手热门歌曲:数量可配置( 海外IP下载xiami资源" 一节加入实验性-p选项,尝试解决频繁请求被服务器ban的问题中英文命令行界面. 配置项 lang=en|cn 默认中文(cn)InstallationArchlinux 用户, zhuaxia可以从AUR中获取稳定版本(master branch):稳定版本:yaourt -S zhuaxia最新git版本(bleeding branch):yaourt -S zhuaxia-git其他用户:sudo python setup.py installUsage配置文件, 第一次运行zx后, 在$HOME/.zhuaxia/ 会有配置文件 zhuaxia.conf 配置参数有中文说明使用:zhuaxia (抓虾) -- 抓取[虾米音乐][网易云音乐]的 mp3 音乐 [CONFIG FILE:]   $HOME/.zhuaxia/zhuaxia.conf [OPTIONS]      -H : 首选HQ质量(320kbps),          > 虾米音乐  网易音乐 <             -无需特殊要求,直接下载高音质资源     -p : (实验性选项)使用代理池下载         在下载/解析量大的情况下,目标服务器会对禁止频繁的请求,所以zhuaxia可以自动获取         代理来解析下载资源。因为获取的代理速度/可靠性不一,下载可能会缓慢或不稳定。     -h :显示帮助     -f :从文件下载     -v :显示版本信息 [USAGE]      zx [OPTION]          : 下载指定URL资源, 抓虾自动识别链接, 支持             - [虾] 歌曲,专辑,精选集,用户收藏,艺人TopN             - [易] 歌曲,专辑,歌单,艺人TopN         例子:            zx "http://www.xiami.com/space/lib-song/u/25531126"           zx "http://music.163.com/song?id=27552647"     zx [OPTION] -f           : 多个URL在一个文件中,每个URL一行。 URLs可以是混合[虾][易]的不同类型音乐资源。例子:           $ cat /tmp/foo.txt             http://music.163.com/artist?id=5345             http://www.xiami.com/song/1772130322             http://music.163.com/album?id=2635059             http://www.xiami.com/album/32449           $ zx -f /tmp/foo.txtProxy setting海外IP下载xiami资源xiami.com屏蔽了海外ip的http请求。在配置文件中添加(如果不存在的话)xiami.proxy.http=ip:port 可以让zhuaxia通过代理来解析xiami资源。 例如:xiami.proxy.http=127.0.0.1:8080这里ip:port构成的http代理是国内的代理服务器。 如果你的机器已经是国内的ip,请注释或删除这个选项。获取国内代理的简单方法:到http://proxy-list.org/ 搜索China的代理就好。Screenshotsdownloading (gif animation) parse input file parse url 标签:zhuaxia
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值