zoukankan      html  css  js  c++  java
  • 把文件打成zip或然rar下载 (详询请加qq:2085920154)

    //文件打包下载

         public static HttpServletResponse downLoadFiles(List<File> files,

                 HttpServletRequest request, HttpServletResponse response)

                 throws Exception {

             try {

                 /**这个集合就是你想要打包的所有文件,

                  * 这里假设已经准备好了所要打包的文件*/

                 //List<File> files = new ArrayList<File>();

         

                 /**创建一个临时压缩文件,

                  * 我们会把文件流全部注入到这个文件中

                  * 这里的文件你可以自定义是.rar还是.zip*/

                 File file = new File("c:/certpics.rar");

                 if (!file.exists()){  

                     file.createNewFile();  

                 }

                 response.reset();

                 //response.getWriter()

                 //创建文件输出流

                 FileOutputStream fous = new FileOutputStream(file);  

                 /**打包的方法我们会用到ZipOutputStream这样一个输出流,

                  * 所以这里我们把输出流转换一下*/

                ZipOutputStream zipOut

                 = new ZipOutputStream(fous);

                 /**这个方法接受的就是一个所要打包文件的集合,

                  * 还有一个ZipOutputStream*/

                zipFile(files, zipOut);

                 zipOut.close();

                 fous.close();

                return downloadZip(file,response);

             }catch (Exception e) {

                     e.printStackTrace();

                 }

                 /**直到文件的打包已经成功了,

                  * 文件的打包过程被我封装在FileUtil.zipFile这个静态方法中,

                  * 稍后会呈现出来,接下来的就是往客户端写数据了*/

               

         

             return response ;

         }

      /**

          * 把接受的全部文件打成压缩包

          * @param List<File>; 

          * @param org.apache.tools.zip.ZipOutputStream 

          */

         public static void zipFile

                 (List files,ZipOutputStream outputStream) {

             int size = files.size();

             for(int i = 0; i < size; i++) {

                 File file = (File) files.get(i);

                 zipFile(file, outputStream);

             }

         }

        public static HttpServletResponse downloadZip(File file,HttpServletResponse response) {

             try {

             // 以流的形式下载文件。

             InputStream 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");

    //如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理

             response.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(file.getName(), "UTF-8"));

             toClient.write(buffer);

             toClient.flush();

             toClient.close();

             } catch (IOException ex) {

             ex.printStackTrace();

             }finally{

                  try {

                         File f = new File(file.getPath());

                         f.delete();

                     } catch (Exception e) {

                         e.printStackTrace();

                     }

             }

             return response;

         }

    /** 

          * 根据输入的文件与输出流对文件进行打包

          * @param File

          * @param org.apache.tools.zip.ZipOutputStream

          */

         public static void zipFile(File inputFile,

                 ZipOutputStream ouputStream) {

             try {

                 if(inputFile.exists()) {

                     /**如果是目录的话这里是不采取操作的,

                      * 至于目录的打包正在研究中*/

                     if (inputFile.isFile()) {

                         FileInputStream IN = new FileInputStream(inputFile);

                         BufferedInputStream bins = new BufferedInputStream(IN, 512);

                         //org.apache.tools.zip.ZipEntry

                         ZipEntry entry = new ZipEntry(inputFile.getName());

                         ouputStream.putNextEntry(entry);

                         // 向压缩文件中输出数据  

                         int nNumber;

                         byte[] buffer = new byte[512];

                         while ((nNumber = bins.read(buffer)) != -1) {

                             ouputStream.write(buffer, 0, nNumber);

                         }

                         // 关闭创建的流对象  

                         bins.close();

                         IN.close();

                     } else {

                         try {

                             File[] files = inputFile.listFiles();

                             for (int i = 0; i < files.length; i++) {

                                 zipFile(files[i], ouputStream);

                             }

                         } catch (Exception e) {

                             e.printStackTrace();

                         }

                     }

                 }

             } catch (Exception e) {

                 e.printStackTrace();

             }

         }

  • 相关阅读:
    最近写代码的风格,请帮忙分析下优缺点
    jQuery的回调管理机制(三)
    jQuery的回调管理机制(二)
    jQuery的回调管理机制
    iOS组件化
    iOS内存泄漏检测及分析
    iOS 路由
    iOS https抓包工作记录
    第二章 算法入门
    第一章 算法在计算中的作用
  • 原文地址:https://www.cnblogs.com/bky8652362/p/5309582.html
Copyright © 2011-2022 走看看