文档章节

Java实现批量下载文件

LIST丶ONE
 LIST丶ONE
发布于 2016/08/10 15:54
字数 778
阅读 86
收藏 0
点赞 0
评论 0

   //action

 public String exportFile1() {
        // TODO Auto-generated method stub
        HttpServletResponse response= ServletActionContext.getResponse();
        HttpServletRequest request = ServletActionContext.getRequest();
        String id = request.getParameter("id");
        String filename = request.getParameter("filename");
        String[] idArr = id.split(",");
        String[] filenameArr = filename.split(",");
        System.out.println(id+"-----"+ filename.replace(" ", ""));
        String filePath = Configration.getApplicationRootPath()+Configration.getProperty("file_PATH") + File.separator+"fileuplod";
        // windows
//        String zipPath = filePath+ "\\"+"zipdata.zip";
        //linux
        String zipPath = filePath+ "//"+"zipdata.zip";
        
        String fileString = "";
        File[] srcfile = new File[idArr.length];
        for(int i = 0;i < idArr.length;i++){
           fileString = specialLineDao.exportFile1(idArr[i]);
           try {
               FileExpUtils.createMkdir(filePath);
               // windows
//               String filePath1 = filePath + "\\"+filenameArr[i];
               //linux
               String filePath1 = filePath + "//"+filenameArr[i];
//               FileExpUtils.createFile(filePath, FileByteUtil.getFromBASE64ToByte(fileString));
               File file = new File(filePath1);
                if (!file.exists()) {
                    file.createNewFile();
                }
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(FileByteUtil.getFromBASE64ToByte(fileString));
                fos.flush();
                fos.close();
                srcfile[i]=file;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }
        //创建压缩文件
        File file1 = new File(zipPath);
        if (!file1.exists()) {
            try {
                file1.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //将文件压缩
        zipFiles(srcfile,file1);
        //下载打包的压缩包
        downloadZip(file1,response); 
        //删除目录及目录下的文件
        FileExpUtils.deleteDirectory(filePath);
        return null;
    }
    public static void zipFiles(File[] srcfile,File zipfile){
        byte[] buf=new byte[1024];
        try {
            //ZipOutputStream类:完成文件或文件夹的压缩
            ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipfile));
            for(int i=0;i<srcfile.length;i++){
                FileInputStream in=new FileInputStream(srcfile[i]);
                out.putNextEntry(new ZipEntry(srcfile[i].getName()));
                int len;
                while((len=in.read(buf))>0){
                    out.write(buf,0,len);
                }
                out.closeEntry();
                in.close();
            }
            out.close();
            System.out.println("压缩完成.");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
       /**
        * 下载打包的文件
        * @param file
        * @param response
        */
       public void downloadZip(File file,HttpServletResponse response) {
           try {
               // 以流的形式下载文件。
               BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
               byte[] buffer = new byte[fis.available()];
               fis.read(buffer);
               fis.close();
               // 清空response
               response.reset();
       
               OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
               response.setContentType("application/octet-stream");
               response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
               toClient.write(buffer);
               toClient.flush();
               toClient.close();
               file.delete();        //将生成的服务器端文件删除
            } 
            catch (IOException ex) {
               ex.printStackTrace();
           }
       }

    /** 
     * 删除目录(文件夹)以及目录下的文件 
     * @param   sPath 被删除目录的文件路径 
     * @return  目录删除成功返回true,否则返回false 
     */  
    public static boolean deleteDirectory(String sPath) {  
        //如果sPath不以文件分隔符结尾,自动添加文件分隔符  
        if (!sPath.endsWith(File.separator)) {  
            sPath = sPath + File.separator;  
        }  
        File dirFile = new File(sPath);  
        //如果dir对应的文件不存在,或者不是一个目录,则退出  
        if (!dirFile.exists() || !dirFile.isDirectory()) {  
            return false;  
        }  
        boolean flag = true;  
        //删除文件夹下的所有文件(包括子目录)  
        File[] files = dirFile.listFiles();  
        for (int i = 0; i < files.length; i++) {  
            //删除子文件  
            if (files[i].isFile()) {  
                flag = deleteFile(files[i].getAbsolutePath());  
                if (!flag) break;  
            } //删除子目录  
            else {  
                flag = deleteDirectory(files[i].getAbsolutePath());  
                if (!flag) break;  
            }  
        }  
        if (!flag) return false;  
        //删除当前目录  
        if (dirFile.delete()) {  
            return true;  
        } else {  
            return false;  
        }  
    }

      /**
      * 将base64字符串解码后返回字节数组
      */
     public static byte[] getFromBASE64ToByte(String s) {
      if (s == null)
       return null;
      BASE64Decoder decoder = new BASE64Decoder();
      try {
       byte[] b = decoder.decodeBuffer(s);
       return b;
      } catch (Exception e) {
       e.printStackTrace();
       return null;
      }
     }

 

//DAO

    public String exportFile1(String id) {
        // TODO Auto-generated method stub
        
        String sql = "SELECT T.ATTACHMENT FROM  LINE_FILE_TAB T WHERE T.ID = '"+id+"'";
        System.out.println("-------------============---------"+sql);
        String str = "";
        try {
            str = colbUtil.clobExport(sql, "ATTACHMENT");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return str;
    }

    public String clobExport(String exportSql,String filename) throws ClassNotFoundException, SQLException,IOException {
        // TODO Auto-generated method stub
        CLOB clob = null;
        DriverManager.registerDriver(new OracleDriver());
        Connection conn = DriverManager.getConnection(url, user, pwd);// 得到连接对象
        PreparedStatement stmt = conn.prepareStatement(exportSql);
        ResultSet rs = stmt.executeQuery();
        String content = "";
        if (rs.next()) {
            clob = (oracle.sql.CLOB) rs.getClob(filename); // 获得CLOB字段str
            // 注释: 用 rs.getString("str")无法得到 数据 ,返回的 是 NULL;
            if(clob == null){
                return content;
            }
            content = ClobToString(clob);
        }
        stmt.close();
        conn.close();
        // 输出结果
        return content;
    }

    // 将字CLOB转成STRING类型
    public String ClobToString(CLOB clob) throws SQLException, IOException {

        String reString = "";
        Reader is = clob.getCharacterStream();// 得到流
        BufferedReader br = new BufferedReader(is);
        String s = br.readLine();
        StringBuffer sb = new StringBuffer();
        while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
            sb.append(s);
            s = br.readLine();
        }
        reString = sb.toString();
        return reString;
    }

© 著作权归作者所有

共有 人打赏支持
LIST丶ONE
粉丝 0
博文 16
码字总数 2778
作品 0
昌平
程序员
selenium通过批处理来自动执行JAVA文件

一、在不想打开 eclipse的情况下,如何实现批处理来自动执行JAVA文件(批处理是自动打开命令窗口执行JAVA文件) 1、下载selenium-server-standalone-2.46.0.jar 2、把selenium-server-stand...

颜丽
2017/10/31
0
0
基于SpringJdbc的泛型Dao

使用的Spring是3.1版本,不是3.0版本。两者还是有区别的,其中一点就是:SimpleJdbcTemplate在3.1版本被标记为过时了,而SimpleJdbcTemplate的一些方法,被JdbcTemplate吸收了。所以,个人推荐...

moz1q1
2014/07/20
0
0
Oracle的JDBC驱动的版本你了解吗?

classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异 在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle JDBC驱动来解决的?最常使用的ojdbc14.jar有多...

i33
2012/02/20
0
0
微服务解决方案 Apache ServiceComb(incubating) 发布新版本

近期,微服务解决方案Apache ServiceComb(incubating) 捷报频传,除了LC3大会ServiceComb Workshop成功举办之外,Java-Chassis 1.0.0-m2、Service-Center 1.0.0-m2和Saga 0.2.0版本顺利通过投...

微服务框架
07/12
0
0
微服务解决方案Apache ServiceComb(incubating) 发布新版本

近期,微服务解决方案Apache ServiceComb(incubating) 捷报频传,除了LC3大会ServiceComb Workshop成功举办之外,Java-Chassis 1.0.0-m2、Service-Center 1.0.0-m2和Saga 0.2.0版本顺利通过投...

微服务框架
07/12
0
0
甲骨文宣布新的 Java SE 订阅模式,为企业提供更广泛支持

甲骨文公司已经改进了Java SE(标准版)的商业支持计划,由之前企业一次性支付永久许可费用加年度支持费用的模式,改为新的订阅模式,并宣布新的模式将于2018年7月开始启用。个人使用和非商业...

达尔文
06/24
0
1
黑马程序员.bobo.DAY.1

C:Program Files (x86)NVIDIA CorporationPhysXCommon;<span style="background:rgb(255,0,0)">%JAVA8HOME%bin;%JAVA8HOME%jrebin;</span>D:oracleproduct10.2.0db_1bin;C:Program Files (x8......

BobbyLou
2015/05/14
0
0
centos7 自动安装openJDK1.8

安装之前先检查一下系统有没有自带open-jdk 命令: rpm -qa grep java rpm -qa grep jdk rpm -qa grep gcj 如果没有输入信息表示没有安装。 如果安装可以使用rpm -qa grep java xargs rpm -...

美丽不打折
06/26
0
0
云栖社区专家系列课——Java必修课第一讲

本节课为 Java必修课第一讲。在本节课中,最课程创始人、微软MVP陆敏枝为了大家介绍了当前Java行业的IT人才供需情况、Java基本语法、JDK的下载与安装、Java环境变量的配置以及第一个Java程序...

笑傲江湖lcx
07/03
0
0
protocol buffer 对socket协议封装成二进制传输

protocol buffer 是 google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是...

MrLovelyCbb
2012/02/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud云服务 - HongHu架构common-service 项目构建过程

上一篇我们介绍了《整合spring cloud云服务架构 - HongHu云架构common-service代码结构分析》,本节我们将对common-service整个项目进行剖析,将整个构建的流程给记录下来,让更多的关注者来...

itcloud
8分钟前
0
0
Connection reset

在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家。例如我们线上的网关日志就会...

夜黑人模糊灬
12分钟前
0
0
如何写PHP规范注释

所有的文档标记都是在每一行的 * 后面以@开头。如果在一段话的中间出来@的标记,这个标记将会被当做普通内容而被忽略掉。 @access 该标记用于指明关键字的存取权限:private、public或prote...

度_
13分钟前
0
0
influxDB Ppostgis

PostGis 1.需要安装postgreSQL,postgis作为插件嵌入到postgreSQL中; 2.使用zip包直接安装,需要修改 makepostgisdb_using_extensions.bat文件中的路径,用户名,密码,然后直接运行; 3.没有...

courtzjl
16分钟前
0
0
多线程Thread-多线程顺序执行

需求:现在有两个任务,任务1和任务2,任务1中有多个线程,并且任务2必须等任务1完成后才能执行。 namespace TThread{ class Program { static void Main(string[] ar...

kaixinguo314
20分钟前
1
0
直播总结

https://blog.csdn.net/weiyuefei/article/details/70257616 视频: 上传服务,转码服务,视频一致性MD5 视频转码技术及转码实现详解 https://wenku.baidu.com/view/32702108844769eae009eda...

素雷
22分钟前
0
0
Linux系统-tcpdump常用抓包命令

序言 单独总结tcpdump抓包的常用命令 主要语法 过滤主机/IP: tcpdump -i eth1 host 172.16.7.206 抓取所有经过网卡1,目的IP为172.16.7.206的网络数据 过滤端口: tcpdump -i eth1 dst port...

MrBoyce
23分钟前
0
0
274. H-Index - LeetCode

Question 274. H-Index Solution 题目大意: 论文里的 h 因子判定,题目的意思可能有点晦涩。h 因子是评判学术成就的一种重要方法,h 因子越高越好,h 因子兼顾研究学术人员的学术产出数量与...

yysue
28分钟前
0
0
 Unable to read class [com.mrp.action.BaseAction]

struts2启动时,出现的 Unable to read class [com.mrp.action.BaseAction] java.lang.NoClassDefFoundError: com/opensymphony/xwork2/util/finder/DefaultClassFinder$InfoBuildingVisito......

uug
29分钟前
0
0
分发系统介绍&expect脚本远程登录&expect脚本远程执行命令&expect脚本传递参数

20.27 分发系统介绍 应用场景 企业中随之业务的逐渐增大,后端所使用的编程语言是php,系统为LAMP/LNMP架构,需要将代码上传到服务器中;代码会不断的迭代,这就需要在业务服务器上更新代码,...

影夜Linux
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部