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 ...
随机推荐
- react native中state和ref的使用
react native中state和ref的使用 因props是只读的,页面中需要交互的情况我们就需要用到state. 一.如何使用state 1:初始化state 第一种方式: construct ...
- Python中用字符串导入module
在Python中,无法通过字符串来导入一个module文件: import "string" # Error x = "string" import x # 不 ...
- Scrum立会报告+燃尽图(Beta阶段第四次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2386 项目地址:https://coding.net/u/wuyy694 ...
- C++ Primer Plus学习:第十章
过程性编程和面向对象编程 面向对象编程(OOP)的特性: 抽象 封装和数据隐藏 多态 继承 代码的可重用性 抽象和类 类是一种将抽象转化为用户定义类型的C++工具,它将数据表示和操纵数据的方法合成一个 ...
- Redis的sentinel机制(sentinel节点IP为:192.168.23.10) “哨兵”
万一主节点打击,主从模型将会停止工作,为了解决这个问题,Redis提供了一个sentinel(哨兵),以此来实现主从切换的功能,一旦主节点宕机了,sentinel将会在从节点中挑一个作为主节点.与zo ...
- phpMyadmin导入导出数据中出现的错误处理
1 2
- Django内置的分页模块
自定义分页 未封装版: 优点:直观 缺点:代码乱,不易维护,可拓展性差 data = [] for i in range(1, 302): tmp = {"id": i, &quo ...
- PHP创建对象的几种形式
创建对象的几种形式 class C1{ var $p1 = 1; //定义一个属性: } 形式1: $o1 = new C1(); //通过一个类,去new出一个对象 形式2: $o2 = new ...
- struts.xml 文件中的 namespace 属性图文详解
namespace:名称空间.默认值是""(空字符串). 名称空间+动作名称:构成了动作的访问路径
- oracle 数据库 命令
SQL PLUS 命令: SELECT * FROM ALL_TABLES;系统里有权限的表SELECT * FROM DBA_TABLES; 系统表SELECT * FROM USER_TABLES ...