java-压缩文件成zip文件(多文件/单文件/多目录/单目录/无目录),用于下载
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处。
http://www.cnblogs.com/king-xg/p/6424788.html
上代码:
package com.king.util; import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; /**
* 压缩文件工具类
* 功能: 支持单文件下载,多文件下载,一目录多文件下载,一目录一文件下载
*
* @author xg君
*
*/
public class CompressFileUtil { private final static byte[] bytes = new byte[1024]; /**
* 单文件压缩
*
* @param srcFilePath
* @param descFilePath
* @param directory
* @throws Exception
*/
public static void compress(String srcFilePath, String descFilePath, String directory) throws Exception{
// 源文件
File srcFile = new File(srcFilePath);
// 目标文件
File descFile = new File(descFilePath);
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(descFile));
compress(srcFile,zos,directory);
zos.close();
} private static void compress(File srcFile ,ZipOutputStream zos, String directory) throws Exception{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
String basePath = "";
if (directory.trim().length() != 0) {
basePath = directory + File.separator;
}
zos.putNextEntry(new ZipEntry(basePath + srcFile.getName()));
int len = -1;
while((len = bis.read(bytes)) > 0){
zos.write(bytes);
}
zos.flush();
bis.close();
} /**
* 多文件下载 - one or no directory
*
* @param srcFiles
* @param descFilePath
* @throws Exception
*/
public static void compress(File[] srcFiles, String descFilePath, String directory) throws Exception{
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(descFilePath)));
for(File file : srcFiles){
compress(file,zos,directory);
}
zos.close();
} /**
* 多文件下载 - multiple files and directories
*
* @param srcFiles
* @param descFilePath
* @param directories
* @throws Exception
*/
public static void compress(File[] srcFiles, String descFilePath, String[] directories) throws Exception{
if(srcFiles.length != directories.length){
throw new Exception("源文件(srcFiles)数量与目录(directories)数量不符!");
}
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(descFilePath)));
for(int i = 0; i < srcFiles.length; i++){
compress(srcFiles[i], zos, directories[i]);
}
zos.close();
} /**
* 多文件下载 - one directory for multiple files
*
* @param map
* @param descFilePath
* @throws Exception
*/
public static void compress(Map<String, String[]> map, String descFilePath) throws Exception{
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(descFilePath)));
Set<Entry<String, String[]>> set = map.entrySet();
for(Entry<String, String[]> en : set){
String directory = en.getKey();
String[] srcFilesPath = en.getValue();
for(String srcFilePath : srcFilesPath){
compress(new File(srcFilePath),zos,directory);
}
}
zos.close();
} }
这是我在工作之余,小结的代码。
java-压缩文件成zip文件(多文件/单文件/多目录/单目录/无目录),用于下载的更多相关文章
- Java压缩/解压.zip、.tar.gz、.tar.bz2(支持中文)
本文介绍Java压缩/解压.zip..tar.gz..tar.bz2的方式. 对于zip文件:使用java.util.zip.ZipEntry 和 java.util.zip.ZipFile,通过设置 ...
- java 压缩和解压zip包
网上有关压缩和解压zip包的博文一大堆,我随便找了一个.看了看,依照自己的须要改动了一下,与各位分享一下,希望各位大神指正: package com.wangpeng.utill; import ja ...
- 原生java 压缩解压zip文件
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...
- JAVA压缩解压ZIP文件,中文乱码还需要ANT.JAR包
package zip; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStrea ...
- Java打包多文件成zip
package com.zh.java.util; import lombok.extern.slf4j.Slf4j; import java.io.File;import java.io.FileI ...
- python实现压缩文件成zip格式
实现代码如下: #压缩文件 import time,zipfile class zip: def get_zip(self,files,zip_name): zp=zipfile.ZipFile(zi ...
- PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天
PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...
- Java实现将文件或者文件夹压缩成zip
最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类. 这个工具类的功能为: ( ...
- java将文件打包成ZIP压缩文件的工具类实例
package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
随机推荐
- [笔记] centos6.6编译安装httpd2.4.10
系统安装包是CentOS-6.6-x86_64-minimal.iso 查看一下uname信息 [root@localhost ~]# uname -a Linux localhost.localdo ...
- mariadb BINLOG_FORMAT = STATEMENT 异常
当在mariadb中插入数据是报 InnoDB is limited to row-logging 异常: java.sql.SQLException: Cannot execute statemen ...
- USACO 3.3.1 Riding the Fences 骑马修栅栏(欧拉回路)
Description 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程 ...
- Alpha阶段事后诸葛亮会议记录
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2324 组名:可以低头,但没必要 组长:付佳 组员:张俊余 李文涛 孙 ...
- Alpha-8
前言 失心疯病源8 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 20:00~23:00 代码整合,已形成可用模块,但还需适应场景局部优化 代码签入gith ...
- mysqldump without auto_increment
mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO ...
- 6/2 sprint2 看板和燃尽图的更新
- IT行业大学生就业分析报告感想
现如今的高校毕业生每年都在增长,就业压力只增不减,人才市场挤满了人 学生们普遍的表现出就业难的情况,并且适合自己的工作也难找 从报告中也容易看出IT行业很吸引人,也是人数最多的,因此机会也就变少了 在 ...
- beta阶段评语
首先我说一下自己心中的排序 1.俄罗斯方块 2 连连看 3 考试管理系统 4 食物链教学软件 5 约跑App 6 礼物挑选小工具 我的理由: 新峰的俄罗斯的方块,虽然当初的亮点没做出来,但是整体流程完 ...
- saltstack基础篇
使用saltstack的前提是PPT 服务.流程.工具和技术 安装 rpm -Uvh http://mirrors.yun-idc.com/epel/6Server/x86_64/epel- ...