JavaWeb项目文件夹生成Zip压缩包并下载到本地
1、FileToZip接口类
/**
*
*/
package com.sale.util;
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;
/**
* 将文件夹下面的文件
* 打包成zip压缩文件
* @author Saffi
* @date 2017-10-16
*/
public final class FileToZip {
private FileToZip(){}
/**
* 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
* @param sourceFilePath :待压缩的文件路径
* @param zipFilePath :压缩后存放路径
* @param fileName :压缩后文件的名称
* @return
* @throws IOException
*/
public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName) throws IOException{
boolean flag = false;
File sourceFile = new File(sourceFilePath);
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
if(sourceFile.exists() == false){
System.out.println("待压缩的文件目录:"+sourceFilePath+"不存在.");
}else{
try {
File zipFile = new File(zipFilePath + "/" + fileName +".zip");
if(zipFile.exists()){
System.out.println(zipFilePath + "目录下存在名字为:" + fileName +".zip" +"打包文件.");
}else{
File[] sourceFiles = sourceFile.listFiles();
if(null == sourceFiles || sourceFiles.length<1){
System.out.println("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩.");
}else{
fos = new FileOutputStream(zipFile);
zos = new ZipOutputStream(new BufferedOutputStream(fos));
byte[] bufs = new byte[1024*10];
for(int i=0;i<sourceFiles.length;i++){
//创建ZIP实体,并添加进压缩包
ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
zos.putNextEntry(zipEntry);
//读取待压缩的文件并写进压缩包里
fis = new FileInputStream(sourceFiles[i]);
bis = new BufferedInputStream(fis, 1024*10);
int read = 0;
while((read=bis.read(bufs, 0, 1024*10)) != -1){
zos.write(bufs,0,read);
}
if(null != bis){
bis.close();
}
}
flag = true;
if(null != zos){
zos.closeEntry();
zos.close();
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally{
//关闭流
try {
if(null != fis){
fis.close();
}
if(null != fos){
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
return flag;
}
}
2、调用接口实现生成压缩包并下载
/**
* 打包Zip并下载
*
*/
@RequestMapping("tevo_testzip.action")
public void downloadZips(HttpServletRequest request,HttpServletResponse response) {
//原文件地址
String sourceFilePath = request.getSession().getServletContext().getRealPath("")+"/download/goodsbarcode";
//生成Zip存放地址
String zipFilePath = request.getSession().getServletContext().getRealPath("")+"/download";
//文件名
String fileName = "goodsbarcode";
try {
//调用FileToZip接口生成压缩包
boolean flag = FileToZip.fileToZip(sourceFilePath, zipFilePath, fileName);
if(flag){
System.out.println("文件打包成功!");
}else{
System.out.println("文件打包失败!");
}
//Zip压缩包文件名
String fileNames = "goodsbarcode.zip";
//Zip压缩包路径
String path = request.getSession().getServletContext().getRealPath("")+"/download/goodsbarcode.zip";
File file = new File(path);
if(file.length()<1||file==null){
System.out.println("文件不存在!");
}else{
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition",
"attachment; filename=" + new String(fileNames.getBytes("ISO8859-1"), "UTF-8"));
response.setContentLength((int) file.length());
response.setContentType("application/zip");// 定义输出类型
FileInputStream fis = new FileInputStream(file);
BufferedInputStream buff = new BufferedInputStream(fis);
byte[] b = new byte[1024];// 相当于我们的缓存
long k = 0;// 该值用于计算当前实际下载了多少字节
OutputStream myout = response.getOutputStream();// 从response对象中得到输出流,准备下载
// 开始循环下载
while (k < file.length()) {
int j = buff.read(b, 0, 1024);
k += j;
myout.write(b, 0, j);
}
// 刷新此输出流并强制将所有缓冲的输出字节被写出
myout.flush();
//关闭流
myout.close();
buff.close();
fis.close();
//删除生成的压缩包文件
file.delete();
}
//删除项目文件夹下所有的图片
File filedel = new File(sourceFilePath);
if (filedel.isDirectory()) { //如果path表示的是一个目录
File[] fileList = filedel.listFiles();
for (int i = 0; i < fileList.length; i++) {
File delfile = fileList[i];
if (!delfile.isDirectory()) { //如果文件的不是一个目录,则删除
//删除文件
delfile.delete();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
转载于:https://www.cnblogs.com/shoose/p/7681003.html
JavaWeb项目文件夹生成Zip压缩包并下载到本地相关推荐
- 通过javascript在网页端生成zip压缩包并下载
通过javascript在网页端生成zip压缩包并下载 原文:通过javascript在网页端生成zip压缩包并下载 zip.js是什么 zip.js的github项目地址:http://gildas ...
- python web项目导出zip文件_通过javascript在网页端生成zip压缩包并下载
zip.js是什么 通过zip.js封装一个能在网页端生成zip文件的插件, 直接在网页中创建包含文件夹和文件的压缩包,也可以自定义名字并下载: 如何使用: 1:引用zip.js 2:引用jQuery ...
- 多个文件生成zip压缩包人后浏览器进行下载
多个文件生成zip 浏览器下载 前言 直接上代码(多个文件生成zip 然后浏览器下载代码) 控制层 前言 第一次写博客 只是想让自己做一些笔记 以后用到我可以在这里找到 直接上代码(多个文件生成zip ...
- java批量下载生成zip压缩包
设计思路: 1.本地先创建一个zip文件 2.将批量下载的文件依次放入zip文件中 3.将zip文件返回给前端 //一.本地先生成zip文件//要批量下载的文件id数组 String[] ids = ...
- php生成zip压缩包、thinkphp压缩和打包下载实例
这里使用PHP扩展的ZipArchive类后和TP5为例 开始打包 // 需要打包的文件 $fileList = array("certificate/newdir/反面.png" ...
- PHP生成zip压缩包
压缩一个文件 我们将一个文件生成一个压缩包. <?php $path = "c:/wamp/www/log.txt"; $filename = "test.zip& ...
- 使用docxtemplater模板语法,导出多个word文件,并生成zip压缩包
文章目录 前言: 一.插件准备: 二.创建一个 download-zip.ts 文件,内容为: 三.页面使用: 四.word模板: 五.结果如下: 六.基本语法: 前言: 1.前端使用的是vue.el ...
- JS - 导出一个或多个pdf 生成zip压缩包
前端生成和导出pdf zip: 使用的插件:jspdf.html2canva.jszip.file-saver 插件安装 :npm install jspdf html2canvas jszip f ...
- Spring Boot 文件通过zip压缩包 批量下载
最近项目中新增了一个需求:要求批量下载之前信息导出的word 文件,也就是批量下载. 数据是保存在ES 中,导出word 的功能也是写好的. 我的思路: 传入数据ID分别导出word 文件到服务器某个 ...
最新文章
- hssfcolor 不建议使用_POI导出Excel经典实现
- 苹果笔记本电脑好用吗_笔记本电脑市场格局重塑 可能比我们想象的来得更迅猛一些...
- access 记录集 filter find属性_《另一个伊甸》超越时空的猫时之塔阵容推荐 时之塔BOSS属性怎么打_另一个伊甸...
- Java基础---集合的概述---list、set、map、泛型、collections
- 2016年第二季度DDoS攻击同比增长129%
- PostgreSQL 增量备份详解以及相关示例
- 使用npm uninstall卸载express无效
- C语言 队列的实现(链表实现)
- Deepin - 环境配置及软件安装卸载记录(Debain镜像源)
- 个人收藏机器学习教程
- adb安装apk到智能TV上
- android emulator 安装 google play
- 从果粉到黑吃黑:一个论坛挂马的奇异反转
- AD批量修改网络标号字体
- Sequence的层次化
- From COM to COM 侯捷
- 黄光裕主宰不了国美的未来
- Unity 工具 之 VText 简单快速实现 文字 3D 效果,VText 的导入设置和简单使用(可支持中文字体)
- 奇迹mu GM命令管理器修改
- Android studio 出现Error:failed to find Build Tools revision 28.0.0 rc1解决方案
热门文章
- python get,post提交表单
- redis:set数据类型和操作
- 可以在一个函数中定义另一个函数_第5周 定义一个函数
- 创科视觉软件说明书_【拓斯达 | GGII】20192023年中国机器视觉行业调研
- python读什么文件最快的软件_这些方法,能够让你的 Python 程序快如闪电
- flask-sqlalchemy mysql_flask-sqlalchemy总结
- 【Elasticsearch】 Elasticsearch并发冲突问题
- 【Elasticsearch】基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化
- 【LogStash】LogStash 配置后无法启动的问题
- dubbo-admin的编译安装