参考:http://brushupo.i.sohu.com/blog/view/161729800.htm



zip下载代码:

package com.util;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;public class DownLoadZipFile {static String path = "";//"c:/certpics.rar"public DownLoadZipFile(String path) {super();this.path = path;}//文件打包下载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(path);if (!file.exists()){   file.createNewFile();   }response.reset();//response.getWriter()//创建文件输出流FileOutputStream fous = new FileOutputStream(file);   /**打包的方法我们会用到ZipOutputStream这样一个输出流,* 所以这里我们把输出流转换一下*/
//            org.apache.tools.zip.ZipOutputStream zipOut
//                = new org.apache.tools.zip.ZipOutputStream(fous);ZipOutputStream zipOut = new ZipOutputStream(fous);/**这个方法接受的就是一个所要打包文件的集合,* 还有一个ZipOutputStream*/zipFile(files, zipOut);zipOut.close();fous.close();return downloadZip(file,response);}catch (Exception e) {e.printStackTrace();}/**直到文件的打包已经成功了,* 文件的打包过程被我封装在FileUtil.zipFile这个静态方法中,* 稍后会呈现出来,接下来的就是往客户端写数据了*/// OutputStream out = response.getOutputStream();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();// 清空responseresponse.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();} 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.ZipEntryZipEntry entry = new ZipEntry(inputFile.getName());//(new   String(inputFile.getName().getBytes("")));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();}}public String getPath() {return path;
}public void setPath(String path) {this.path = path;
}}






实现一个大包导出文件的功能,把许多文件打包成一个zip包,后解压压缩的中文文件名乱码。

    问题是:因为ZipOutputStream压缩和解压ZIP文件对文件名都是以UTF-8编码方式来处理的,而WinZip对文件名只会以ASCII编码方式来处理。所以他们之间会产生冲突:WinZip解压Java产生的压缩文件时文件名乱码;Java解压WinZip产生的压缩文件时出现异常。
解决办法:Apache Ant有个包专门处理ZIP文件,可以指定文件名的编码方式。由此可以解决问题。

    我将原来的:

         import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

         更换为:

        import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream; 

        问题就解决了!

将文件打包成zip包相关推荐

  1. python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值

    #!/usr/bin/env python #_*_encoding:utf-8 # 2018/05/29 #augustyang #2.0 ''' 解压文件,合并文件 打包成zip格式文件 生成MD ...

  2. think.class.php下载,PHP_ThinkPHP实现将本地文件打包成zip下载,首先,将FileToZip.class文件放到T - phpStudy...

    ThinkPHP实现将本地文件打包成zip下载 首先,将FileToZip.class文件放到ThinkPHP/Extend/Library/ORG/Util/文件夹中,FileToZip.class ...

  3. java 文件流的处理 文件打包成zip

    1.下载文件到本地 public void download(HttpServletResponse response){String filePath ="";//文件路径Str ...

  4. java 把文件打包成zip_java 文件流的处理 文件打包成zip

    1.下载文件到本地 public void download(HttpServletResponse response){ String filePath ="";//文件路径 S ...

  5. Java将多个文件打包成ZIP并下载

    Java将多个文件打包成ZIP并下载 需求是多个文件需要同时打包成zip压缩文件并下载到本地,首先我需要的是知道下载文件的路径.我有一个专门的sys_file_info表,表中有对应的文件路径.业务表 ...

  6. 文件打包成zip类型文件

    研究了一下,如何把文件打包成Zip文件. 下面是我经历的进程: 1. 首先看到了微软本身的打包代码,是通过System.IO.Packaging 命令空间来进行打包,你可以点击以上的链接来查看其如何打 ...

  7. 关于springmvc下服务器文件打包成zip格式下载功能

    关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...

  8. JAVA实现把指定文件夹下的所有文件压缩成zip包

    1.代码如下: package cn.gov.csrc.base.util;import java.io.BufferedInputStream; import java.io.BufferedOut ...

  9. MATLAB 2014a将m文件打包成jar包

    具体过程参考: Matlab -- 将m文件打包成jar包 (一).打包过程 具体遇到的问题如下: 问题1 出现:Error: An error occurred while shelling out ...

最新文章

  1. python获取用户输入的数字_Python 将用户输入的数字 提取整数谢谢
  2. x shell 配置 和相关注意点(vm相关注意点)
  3. 15个月纪念,开心!
  4. Angular input控件的click事件表达式如何被转换成JavaScript函数
  5. RenderManager - cssHook - select_all icon render logic
  6. 菜鸟超级进口大仓618首度亮相!跨境商品也能当日次日达
  7. 页面跳转多种方法(加传参)
  8. Python中文编码问题详解
  9. java工程师占比_Java工资怎么样?哪个地方Java工作机会最多?
  10. Adobe_Audition消除人声
  11. 高级转录组分析和R语言数据可视化课程全部转为视频课
  12. 用户访问一个网站的全部过程
  13. JAVA中反射机制五(JavaBean的内省与BeanUtils库)
  14. Failed to start The nginx HTTP and reverse proxy server
  15. BP神经网络matlab代码
  16. 状态监测与故障智能诊断技术在能源动力机械内燃机的应用
  17. Oracle的学习视频
  18. 两个坚持是什么_坚持跑步八年,90后大学生告诉你,坚持锻炼的意义
  19. 中国商界的顶级秘法之一:民营企业的五层次策划
  20. html5测网速,ajax测网速(示例代码)

热门文章

  1. 佳明手表大数据应用_最强跑步手表—佳明Forerunner 245功能评测
  2. selenium之find_elements的妙用
  3. Android 手机版本查询
  4. Jeff Dean万字总结!图解谷歌2022年AIGC、LLM、CV三大领域成就
  5. C++Directx11开发笔记二:Direct3D基础设备的初始化
  6. 企业邮箱怎么申请?公司域名后缀的企业邮箱如何注册呢?
  7. JVM垃圾回收系列之垃圾收集器一
  8. CNN入门+猫狗大战(Dogs vs. Cats)+PyTorch入门
  9. a 标签链接 设置点击下载文件
  10. FileZilla无法连接ftp服务器的解决方案