分享

如何将文件打成zip包并下载

 瑶疏影 2020-12-22

@FunctionDesc("下载附件")

@RequestMapping(value = "/exportAttachments", method = RequestMethod.GET)

public void exportAttachments(HttpServletResponse response){

try{

                        //要打包文件所在的文件夹的路径

String filePath = “D:/nt/xsMGR/attachments/”;

File file = new File(filePath); 

if(file.isFile()){

System.out.println("文件=="+file.getName()+"不是一个目录 不做处理文件");

}

if(file.isDirectory()){

                                         //给zip命名为123.zip

File zipFile  = new File(file+File.separator+"123.zip");

if(!zipFile.exists()){

System.out.println("开始压缩");

                  File[]  tempFiles = file.listFiles(); 

                  String[] fileNames = new String[tempFiles.length];

                  for(int j=0;j<tempFiles.length;j++){

                  fileNames[j] = tempFiles[j].getAbsolutePath();

                  System.out.println("============"+ fileNames[j]);

                  }  

                  ZipUtil zipUitl = new ZipUtil();                 

                  zipUitl.zipFileAbsolute(fileNames,zipFile.getAbsolutePath());                  

                  System.out.println("文件压缩完成"); 

}else{

System.out.println("压缩文件已存在");

}  

                 // response.reset(); 

                  response.setCharacterEncoding("UTF-8");

              response.setContentType("application/octet-stream"); 

             //解决中文乱码

              String fileName = java.net.URLEncoder.encode("123.zip", "UTF-8");  

          response.addHeader("Content-Disposition", "attachment; filename=" + fileName);

              //获取文件输入流

              InputStream in = new FileInputStream(zipFile); 

              int len = 0;

              byte[] buffer = new byte[1024];  

              while ((len = in.read(buffer)) > 0) {    

              //将缓冲区的数据输出到客户端浏览器 

              response.getOutputStream().write(buffer,0,len);

              } 

              in.close(); 

}      

         }catch(Exception e){

        e.printStackTrace();

        }

         }


import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;

public class ZipUtil {

private final Logger log = Logger.getLogger(this.getClass()); 

private static final int BUFFER = 1024;

public  void zipFileAbsolute (String[] files, String destFile)

{

try

{

BufferedInputStream origin = null;

FileOutputStream dest;

dest = new FileOutputStream(destFile);

ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));

byte data[] = new byte[BUFFER];

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

{

FileInputStream fi = new FileInputStream(files[i]);

origin = new BufferedInputStream(fi, BUFFER);

File file=new File(files[i]);

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

out.putNextEntry(entry);

int count;

while ((count = origin.read(data, 0, BUFFER)) != -1)

{

out.write(data, 0, count);

}

origin.close();

// 关闭数据流

fi.close();

}

out.close();

dest.close();

}

catch (FileNotFoundException e)

{

log.error("打包的文件未找到" + e.toString());

}

catch (IOException e)

{

log.error("写入文件时出现异常?!" + e.toString());

}

}

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约