/**
* 文件批量打包
* @param zipPath 打包路径
* @param files 批量文件
*/
public void zipOut(String zipPath,File[] files){
byte[] buffer = new byte[1024];
try {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath));
for(int i=0;i<files.length;i++) {
FileInputStream fis = new FileInputStream(files[i]);
out.putNextEntry(new ZipEntry(files[i].getName()));
int len;
//读入需要下载的文件的内容,打包到zip文件
while((len = fis.read(buffer))>0) {
out.write(buffer,0,len);
}
out.closeEntry();
fis.close();
//删除文件,可以不删
files[i].delete();
}
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("生成zip文件成功");
}

以上为java.util包zip的压缩方式,弊端是不能修改编码。下面介绍apache.tools包zip的压缩方式。

/**
* 创建ZIP文件
* @param zipPath 生成的zip文件存在路径(包括文件名)
* @param files 写入的文件
*/
public static void zipOut(String zipPath,File[] files) {
FileOutputStream fos = null;
ZipOutputStream zos = null;
try {
fos = new FileOutputStream(zipPath);
zos = new ZipOutputStream(fos);
writeZip(files, zos);
} catch (FileNotFoundException e) {
System.out.println("创建ZIP文件失败");
} finally {
try {
if (zos != null) {
zos.close();
}
} catch (IOException e) {
System.out.println("创建ZIP文件失败");
} }
}
/**
* 写入内容
* @param files
* @param zos
*/
private static void writeZip(File[] files, ZipOutputStream zos) {
for(int i=0;i<files.length;i++) {
if(files[i].exists()){
FileInputStream fis=null;
DataInputStream dis=null;
try {
fis=new FileInputStream(files[i]);
dis=new DataInputStream(new BufferedInputStream(fis));
ZipEntry ze = new ZipEntry(files[i].getName());
zos.putNextEntry(ze);
//添加编码,如果不添加,当文件以中文命名的情况下,会出现乱码
// ZipOutputStream的包一定是apache的ant.jar包。JDK也提供了打压缩包,但是不能设置编码
zos.setEncoding("GBK");
byte [] content=new byte[1024];
int len;
while((len=fis.read(content))!=-1){
zos.write(content,0,len);
zos.flush();
}
} catch (FileNotFoundException e) {
System.out.println("创建ZIP文件失败");
} catch (IOException e) {
System.out.println("创建ZIP文件失败");
}finally{
try {
if(dis!=null){
dis.close();
}
}catch(IOException e){
System.out.println("创建ZIP文件失败");
}
}
}
}
}

java zip 批量打包(java.util包和apache.tools包)的更多相关文章

  1. 2018-03-21 11:34:44 java脚本批量转换java utf-8 bom源码文件为utf-8编码文件

    package com.springbootdubbo; import java.io.*;import java.util.ArrayList;import java.util.List; /** ...

  2. java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹

    一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry  ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io ...

  3. java代码实现打包多个文件下载功能

    //传入对应的需要打包的file 集合对象 //文件打包下载     public static HttpServletResponse downLoadFiles(List<File> ...

  4. java.util.zip压缩打包文件总结二: ZIP解压技术

    一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: Checked ...

  5. java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩

    现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...

  6. 一文教您如何通过 Java 压缩文件,打包一个 tar.gz Filebeat 采集器包

    欢迎关注笔者的公众号: 小哈学Java, 专注于推送 Java 领域优质干货文章!! 个人网站: https://www.exception.site/essay/create-tar-gz-by-j ...

  7. java zip API实现压缩和解压缩zip包

    package zip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io ...

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

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

  9. java中ant包中的org.apache.tools.zip实现压缩和解压缩

    其实apache中的ant包(请自行GOOGLE之ant.jar)中有一个更好的类,已经支持中文了,我们就不重复制造轮子了,拿来用吧,这里最主要的功能是实现了 可以指定多个文件 到同一个压缩包的功能 ...

随机推荐

  1. WCF 自承载

    WCF 自承载 提供源码 一.WCF 简单介绍 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,是一套通讯接口.现在比较流行的S ...

  2. HttpClient的使用-爬虫学习(一)

    Apache真是伟大,为我们提供了HttpClient.jar,这个HttpClient是客户端的http通信实现库,这个类库的作用是接受和发送http报文,引进这个类库,我们对于http的操作会变得 ...

  3. Redis集群方案

    Redis集群方案 前段时间搞了搞Redis集群,想用做推荐系统的线上存储,说来挺有趣,这边基础架构不太完善,因此需要我们做推荐系统的自己来搭这个存储环境,就自己折腾了折腾.公司所给机器的单机性能其实 ...

  4. rcp(插件开发) 如何查找自己定义的扩展点

    规则: 扩展点所在的插件ID(X)+扩展点的name(Y) 也就是 X.Y 具体代码 Platform.getExtensionRegistry().getExtensionPoint(X.Y).ge ...

  5. JavaWEB开发国际化

    1.国际化开发概述 )软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. )国际化又称为 i18n:inter ...

  6. js框架漫谈

    现在实际项目中可供选择的javascript框架很多,热门的有jquery,dojo,mootools,ext等.这些框架按照不同的标准有不同的分类方法,比如按照扩展方式便可分为prototype式的 ...

  7. C# 遍历本地网络

    public static bool IsHNetCfgWayConnected(string opName) { NetSharingManagerClass netSharingMgr = new ...

  8. Nunit NMock Ncover单元测试

    Nunit中如何进行事务性单元测试   单元测试要求:单元测试方法并不真正去变更数据库,也就是说单元测试不依赖于数据库中的数据.那我们如何解决执行单元测试方法后,不变更数据库中数据呢? 一般的解决方案 ...

  9. 我是如何理解ThreadLocal

    ThreadLocal的概念 ThreadLocal从英文的角度看,可以看成thread和local的组合,就是线程本地的意思,我们都知道,看过jvm内存分配的人都知道在jvm虚拟机中对每一个线程都分 ...

  10. easyUI datagrid 动态绑定列名称

    easyUI 基于Jquery ,所以需要引用Jquery文件 easyUI自带了很多样式文件,可以根据需要,引用相应的css文件. 其中datagrid是一个根据json数据,js前端生成前端显示的 ...