文档章节

Java实现批量下载文件

LIST丶ONE
 LIST丶ONE
发布于 2016/08/10 15:54
字数 778
阅读 110
收藏 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
java 私塾JDBC笔记整理

java 私塾JDBC笔记整理 一.JDBC是什么? Java DataBase Connection(类似于IO). 二.JDBC怎样实现传输? JDBC利用Driver来连接不同的数据库。如Oracle, SQL Server, MySql , DB2. Driver(驱动)...

luodis
2011/03/03
252
0
使用UML创建模块库——第一部分(三)

MyEclipse 在线购买低至75折!火爆开抢>> 【MyEclipse最新版下载】 UML1建模文件存储在建模库中,建模可用于生成Java代码,或者可以从代码中生成模型。本教程将向您展示如何执行与建模资源库...

Miss_Hello_World
2018/08/02
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

没有更多内容

加载失败,请刷新页面

加载更多

mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
今天
2
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
今天
3
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
今天
5
0
oracle dg备库重建redolog:ora-00313,ora-00312

trace文件: Errors in file /crbank/dbs/app/product/diag/rdbms/rdbs/dbs/trace/dbs_mrp0_24445130.trc: ORA-00313: open failed for members of log group 8 of thread 1 ORA-00312: onl......

hnairdb
今天
3
0
深入分析Java I/O的工作机制 (一)

1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合,类库包括接口、抽象类、具体类等。 I/O是机器获取和交互信息的主要渠道。 java在I/O上也一直在做持续的优化,在1.4版开始...

java菜分享
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部