将文件打包成zip包
参考: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包相关推荐
- python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值
#!/usr/bin/env python #_*_encoding:utf-8 # 2018/05/29 #augustyang #2.0 ''' 解压文件,合并文件 打包成zip格式文件 生成MD ...
- think.class.php下载,PHP_ThinkPHP实现将本地文件打包成zip下载,首先,将FileToZip.class文件放到T - phpStudy...
ThinkPHP实现将本地文件打包成zip下载 首先,将FileToZip.class文件放到ThinkPHP/Extend/Library/ORG/Util/文件夹中,FileToZip.class ...
- java 文件流的处理 文件打包成zip
1.下载文件到本地 public void download(HttpServletResponse response){String filePath ="";//文件路径Str ...
- java 把文件打包成zip_java 文件流的处理 文件打包成zip
1.下载文件到本地 public void download(HttpServletResponse response){ String filePath ="";//文件路径 S ...
- Java将多个文件打包成ZIP并下载
Java将多个文件打包成ZIP并下载 需求是多个文件需要同时打包成zip压缩文件并下载到本地,首先我需要的是知道下载文件的路径.我有一个专门的sys_file_info表,表中有对应的文件路径.业务表 ...
- 文件打包成zip类型文件
研究了一下,如何把文件打包成Zip文件. 下面是我经历的进程: 1. 首先看到了微软本身的打包代码,是通过System.IO.Packaging 命令空间来进行打包,你可以点击以上的链接来查看其如何打 ...
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...
- JAVA实现把指定文件夹下的所有文件压缩成zip包
1.代码如下: package cn.gov.csrc.base.util;import java.io.BufferedInputStream; import java.io.BufferedOut ...
- MATLAB 2014a将m文件打包成jar包
具体过程参考: Matlab -- 将m文件打包成jar包 (一).打包过程 具体遇到的问题如下: 问题1 出现:Error: An error occurred while shelling out ...
最新文章
- python获取用户输入的数字_Python 将用户输入的数字 提取整数谢谢
- x shell 配置 和相关注意点(vm相关注意点)
- 15个月纪念,开心!
- Angular input控件的click事件表达式如何被转换成JavaScript函数
- RenderManager - cssHook - select_all icon render logic
- 菜鸟超级进口大仓618首度亮相!跨境商品也能当日次日达
- 页面跳转多种方法(加传参)
- Python中文编码问题详解
- java工程师占比_Java工资怎么样?哪个地方Java工作机会最多?
- Adobe_Audition消除人声
- 高级转录组分析和R语言数据可视化课程全部转为视频课
- 用户访问一个网站的全部过程
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)
- Failed to start The nginx HTTP and reverse proxy server
- BP神经网络matlab代码
- 状态监测与故障智能诊断技术在能源动力机械内燃机的应用
- Oracle的学习视频
- 两个坚持是什么_坚持跑步八年,90后大学生告诉你,坚持锻炼的意义
- 中国商界的顶级秘法之一:民营企业的五层次策划
- html5测网速,ajax测网速(示例代码)
热门文章
- 佳明手表大数据应用_最强跑步手表—佳明Forerunner 245功能评测
- selenium之find_elements的妙用
- Android 手机版本查询
- Jeff Dean万字总结!图解谷歌2022年AIGC、LLM、CV三大领域成就
- C++Directx11开发笔记二:Direct3D基础设备的初始化
- 企业邮箱怎么申请?公司域名后缀的企业邮箱如何注册呢?
- JVM垃圾回收系列之垃圾收集器一
- CNN入门+猫狗大战(Dogs vs. Cats)+PyTorch入门
- a 标签链接 设置点击下载文件
- FileZilla无法连接ftp服务器的解决方案