java下载zip文件

基本功能:

第一种:

E盘下某一个目录下所有文件以及文件夹打包下载

首先工具类 直接复制进去就好

public static void doCompress(String srcFile, String zipFile) throws IOException {
               doCompress(new File(srcFile), new File(zipFile));
           }
           
           /**
            * 文件压缩
            * @param srcFile 目录或者单个文件
            * @param zipFile 压缩后的ZIP文件
            */
           public static void doCompress(File srcFile, File zipFile) throws IOException {
               ZipOutputStream out = null;
               try {
                   out = new ZipOutputStream(new FileOutputStream(zipFile));
                   doCompress(srcFile, out);
               } catch (Exception e) {
                   throw e;
               } finally {
                   out.close();//记得关闭资源
               }
           }
           
           public static void doCompress(String filelName, ZipOutputStream out) throws IOException{
               doCompress(new File(filelName), out);
           }
           
           public static void doCompress(File file, ZipOutputStream out) throws IOException{
               doCompress(file, out, "");
           }
           
           public static void doCompress(File inFile, ZipOutputStream out, String dir) throws IOException {
               if ( inFile.isDirectory() ) {
                   File[] files = inFile.listFiles();
                   if (files!=null && files.length>0) {
                       for (File file : files) {
                           String name = inFile.getName();
                           if (!"".equals(dir)) {
                               name = dir + "/" + name;
                           }
                           FileUtil.doCompress(file, out, name);
                       }
                   }
               } else {
                   FileUtil.doZip(inFile, out, dir);
               }
           }
           
           public static void doZip(File inFile, ZipOutputStream out, String dir) throws IOException {
               String entryName = null;
               if (!"".equals(dir)) {
                   entryName = dir + "/" + inFile.getName();
               } else {
                   entryName = inFile.getName();
               }
               ZipEntry entry = new ZipEntry(entryName);
               out.putNextEntry(entry);
               
               int len = 0 ;
               byte[] buffer = new byte[1024];
               FileInputStream fis = new FileInputStream(inFile);
               while ((len = fis.read(buffer)) > 0) {
                   out.write(buffer, 0, len);
                   out.flush();
               }
               out.closeEntry();
               fis.close();
           }

测试:

打包 E:\testExport\export 以及下面所有子文件和文件夹

@RequestMapping(params = { "*****" })
    public void exportShowPic(HttpServletRequest request,HttpServletResponse response) throws IOException {
         String zipName = "myfile.zip";
            response.setContentType("APPLICATION/OCTET-STREAM");  
            response.setHeader("Content-Disposition","attachment; filename="+zipName);
            ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
            try {
              
                FileUtil.doCompress("E:\\testExport\\export", out);
                  response.flushBuffer();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                out.close();
            }
    }

结果:下载成功

在这里插入图片描述

以上是下载打包好的压缩文件

第二种:

将本地的文件直接打包到指定目录 不需要下载

还是先把方法给大家(也是copy的):

    /**
    * 压缩文件
    *
    * @param sourceFilePath 源文件路径
    * @param zipFilePath    压缩后文件存储路径
    * @param zipFilename    压缩文件名
    */
   public void compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) {
       File sourceFile = new File(sourceFilePath);
       File zipPath = new File(zipFilePath);
       if (!zipPath.exists()) {
           zipPath.mkdirs();
       }
       File zipFile = new File(zipPath + File.separator + zipFilename);
       try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
           writeZip(sourceFile, "", zos);
           //文件压缩完成后,删除被压缩文件
          // boolean flag = deleteDir(sourceFile);
       } catch (Exception e) {
           e.printStackTrace();
           throw new RuntimeException(e.getMessage(), e.getCause());
       }
   }
   
   /**
    * 遍历所有文件,压缩
    *
    * @param file       源文件目录
    * @param parentPath 压缩文件目录
    * @param zos        文件流
    */
   public static void writeZip(File file, String parentPath, ZipOutputStream zos) {
       if (file.isDirectory()) {
           //目录
           parentPath += file.getName() + File.separator;
           File[] files = file.listFiles();
           for (File f : files) {
               writeZip(f, parentPath, zos);
           }
       } else {
           //文件
           try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
               //指定zip文件夹
               ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());
               zos.putNextEntry(zipEntry);
               int len;
               byte[] buffer = new byte[1024 * 10];
               while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
                   zos.write(buffer, 0, len);
                   zos.flush();
               }
           } catch (Exception e) {
               e.printStackTrace();
               throw new RuntimeException(e.getMessage(), e.getCause());
           }
           }
       }
   
   /**
    * 删除文件夹
    *
    * @param dir
    * @return
    */
   public static boolean deleteDir(File dir) {
       if (dir.isDirectory()) {
           String[] children = dir.list();
           for (int i = 0; i < children.length; i++) {
               boolean success = deleteDir(new File(dir, children[i]));
               if (!success) {
                   return false;
               }
           }
       }
       //删除空文件夹
       return dir.delete();
   }

然后测试:

@RequestMapping(params = { "****" })
    @ResponseBody
    public AjaxJson exportShowPic(HttpServletRequest request,HttpServletResponse response) throws IOException {
        AjaxJson ajaxJson = new AjaxJson();
        try {
            FileUtil fuUtil = new FileUtil();
            String planId = request.getParameter("id");
            System.out.println("planId"+planId);
            String sourceFilePath ="E:\\testExport";
            String zipFilePath ="E:\\11";
            String fileName = "test.zip";
            fuUtil.compressToZip(sourceFilePath, zipFilePath, fileName);
            
            
            String zipName = "myfile.zip";
            response.setContentType("APPLICATION/OCTET-STREAM");  
            response.setHeader("Content-Disposition","attachment; filename="+zipName);
            ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
           
            
            ajaxJson.setSuccess(true);
            ajaxJson.setMsg("下载成功");
        } catch (Exception e) {
            ajaxJson.setSuccess(false);
            ajaxJson.setMsg("下载失败  联系管理员");
            e.printStackTrace();
        }
        return ajaxJson;
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值