本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处。

  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文件(多文件/单文件/多目录/单目录/无目录),用于下载的更多相关文章

  1. Java压缩/解压.zip、.tar.gz、.tar.bz2(支持中文)

    本文介绍Java压缩/解压.zip..tar.gz..tar.bz2的方式. 对于zip文件:使用java.util.zip.ZipEntry 和 java.util.zip.ZipFile,通过设置 ...

  2. java 压缩和解压zip包

    网上有关压缩和解压zip包的博文一大堆,我随便找了一个.看了看,依照自己的须要改动了一下,与各位分享一下,希望各位大神指正: package com.wangpeng.utill; import ja ...

  3. 原生java 压缩解压zip文件

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...

  4. JAVA压缩解压ZIP文件,中文乱码还需要ANT.JAR包

    package zip; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStrea ...

  5. Java打包多文件成zip

    package com.zh.java.util; import lombok.extern.slf4j.Slf4j; import java.io.File;import java.io.FileI ...

  6. python实现压缩文件成zip格式

    实现代码如下: #压缩文件 import time,zipfile class zip: def get_zip(self,files,zip_name): zp=zipfile.ZipFile(zi ...

  7. PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 && Linux下的ZipArchive配置开启压缩 &&搞个鸡巴毛,写少了个‘/’号,浪费了一天

    PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有 ...

  8. Java实现将文件或者文件夹压缩成zip

            最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类.         这个工具类的功能为: ( ...

  9. java将文件打包成ZIP压缩文件的工具类实例

    package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

随机推荐

  1. 使用Scrapy构建一个网络爬虫

    记得n年前项目需要一个灵活的爬虫工具,就组织了一个小团队用Java实现了一个爬虫框架,可以根据目标网站的结构.地址和需要的内容,做简单的配置开发,即可实现特定网站的爬虫功能.因为要考虑到各种特殊情形, ...

  2. Android 中的广播机制

    Android 中的广播机制 Android 中的广播,按照广播响应范围,可以分为应用内广播和全局广播.按照广播的接收方式,可以分为标准广播和有序广播. 广播的分类 响应范围 应用内广播:此类广播只能 ...

  3. HDU 5496 Beauty of Sequence

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5496 Beauty of Sequence Problem Description Sequence ...

  4. lintcode-496-玩具工厂

    496-玩具工厂 工厂模式是一种常见的设计模式.请实现一个玩具工厂 ToyFactory 用来产生不同的玩具类.可以假设只有猫和狗两种玩具. 您在真实的面试中是否遇到过这个题? Yes 样例 ToyF ...

  5. Microsoft Orleans 之 开发人员指南

    开发一个Grain 在开发Grain之前请先阅读Grains 这篇文章 Grain 接口 Grains通过调用各自定义在接口中的方法相互作用,一个grain实现了事先定义好的一个或多个接口,grain ...

  6. Scrum Meeting Beta - 1

    Scrum Meeting Beta - 1 NewTeam 2017/11/28 地点:主南201 任务反馈 团队成员 完成任务 计划任务 安万贺 详细讨论Beta阶段的任务和具体分工 了解缓存的相 ...

  7. 201621123037 《Java程序设计》第4周学习总结

    #Week04-面向对象设计与继承 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:超级父类."is-a".父类.子类.重载.继承.多态 1.2 尝 ...

  8. laravel连接多个不同数据库的单例类

    在連接多個不同數據庫時,需要寫多個連接,爲了簡化該操作,可以使用該基類,不同的數據庫只要建立好相對應的類繼承該類,就可以使用ORM模型進行操作了. class singletonInstance { ...

  9. 知识点总结:Linq和Lambda

    基本语法: Linq:var result=from t in table order by sort ascending/descending select t: Lambda:var result ...

  10. LoadRunner脚本增强技巧之参数化(一)

    参数化的方式有两种,一种通过File引入参数值,一种通过数据库引入参数值.本篇介绍File方式引入参数值. 一.File方式参数化过程 1.在脚本中找到需要做参数化的字符串,选中,右键点击,选择Rep ...