package zip;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream; import java.util.Enumeration;
import java.util.zip.Deflater; import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream; public class Zip { public static void main(String[] args){
// new Zip().doZip("d:/报表程序","e:/报表程序.rar");
new Zip().unZip("e:/报表程序.rar","d:/报表程序");
} private ZipFile zipFile;
private ZipOutputStream zipOut; //压缩Zip
private int bufSize; //size of bytes
private byte[] buf; public Zip(){
//要构造函数中去初始化我们的缓冲区
this.bufSize = 1024*4;
this.buf = new byte[this.bufSize];
} /**
* 对传入的目录或者是文件进行压缩
* @param srcFile 需要 压缩的目录或者文件
* @param destFile 压缩文件的路径
*/
public void doZip(String srcFile, String destFile) {// zipDirectoryPath:需要压缩的文件夹名
File zipFile = new File(srcFile);
try {
//生成ZipOutputStream,会把压缩的内容全都通过这个输出流输出,最后写到压缩文件中去
this.zipOut = new ZipOutputStream(new BufferedOutputStream(
new FileOutputStream(destFile)));
//设置压缩的注释
zipOut.setComment("comment");
//设置压缩的编码,如果要压缩的路径中有中文,就用下面的编码
zipOut.setEncoding("GBK");
//启用压缩
zipOut.setMethod(ZipOutputStream.DEFLATED); //压缩级别为最强压缩,但时间要花得多一点
zipOut.setLevel(Deflater.BEST_COMPRESSION); handleFile(zipFile, this.zipOut,"");
//处理完成后关闭我们的输出流
this.zipOut.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
} /**
* 由doZip调用,递归完成目录文件读取
* @param zipFile
* @param zipOut
* @param dirName 这个主要是用来记录压缩文件的一个目录层次结构的
* @throws IOException
*/
private void handleFile(File zipFile, ZipOutputStream zipOut,String dirName) throws IOException {
System.out.println("遍历文件:"+zipFile.getName());
//如果是一个目录,则遍历
if(zipFile.isDirectory()){
File[] files = zipFile.listFiles(); if (files.length == 0) {// 如果目录为空,则单独创建之.
//只是放入了空目录的名字
this.zipOut.putNextEntry(new ZipEntry(dirName+zipFile.getName()+File.separator));
this.zipOut.closeEntry();
} else {// 如果目录不为空,则进入递归,处理下一级文件
for (File file : files) {
// 进入递归,处理下一级的文件
handleFile(file, zipOut, dirName+zipFile.getName()+File.separator);
}
}
}else{//如果是文件,则直接压缩
FileInputStream fileIn = new FileInputStream(zipFile);
//放入一个ZipEntry
this.zipOut.putNextEntry(new ZipEntry(dirName+zipFile.getName()));
int length = 0;
//放入压缩文件的流
while ((length = fileIn.read(this.buf)) > 0) {
this.zipOut.write(this.buf, 0, length);
}
//关闭ZipEntry,完成一个文件的压缩
fileIn.close();
this.zipOut.closeEntry();
}
} /**
* 解压指定zip文件
* @param unZipfile 压缩文件的路径
* @param destFile   解压到的目录 
*/
public void unZip(String unZipfile, String destFile) {// unZipfileName需要解压的zip文件名
FileOutputStream fileOut;
File file;
InputStream inputStream; try {
//生成一个zip的文件
this.zipFile = new ZipFile(unZipfile);
//遍历zipFile中所有的实体,并把他们解压出来
for (@SuppressWarnings("unchecked")
Enumeration<ZipEntry> entries = this.zipFile.getEntries(); entries
.hasMoreElements();) {
ZipEntry entry = entries.nextElement();
//生成他们解压后的一个文件
file = new File(destFile+File.separator+entry.getName()); if (entry.isDirectory()) {
file.mkdirs();
} else {
// 如果指定文件的目录不存在,则创建之.
File parent = file.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
//获取出该压缩实体的输入流
inputStream = zipFile.getInputStream(entry); fileOut = new FileOutputStream(file);
int length = 0;
//将实体写到本地文件中去
while ((length = inputStream.read(this.buf)) > 0) {
fileOut.write(this.buf, 0, length);
}
fileOut.close();
inputStream.close();
}
}
this.zipFile.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}

JAVA压缩解压ZIP文件,中文乱码还需要ANT.JAR包的更多相关文章

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

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

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

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

  3. (转载)C#压缩解压zip 文件

    转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...

  4. java实现解压zip文件,(亲测可用)!!!!!!

    项目结构: Util.java内容: package com.cfets.demo; import java.io.File; import java.io.FileOutputStream; imp ...

  5. 解压zip文件中文文件名乱码问题

    主要原因是,在windows下压缩文件时,是以系统的默认编码(gbk,gb18030)来压缩,zip文件并没有声明编码的格式,因此,linux下解压缩时,也会使用系统默认的格式(utf-8)解压缩,编 ...

  6. java 提取(解压)zip文件中特定后缀的文件并保存到指定目录

    内容简介 本文主要介绍使用ZipFile来提取zip压缩文件中特定后缀(如:png,jpg)的文件并保存到指定目录下. 导入包:import java.util.zip.ZipFile; 如需添加对r ...

  7. Java 压缩/ 解压 .Z 文件

    1.问题描述 公司项目有需要用 JAVA 解压 .z文件. .z 是 unix 系统常见的压缩文件. 2.源码 import com.chilkatsoft.CkUnixCompress; impor ...

  8. C#压缩解压zip 文件

    /// <summary> /// Zip 压缩文件 /// </summary> public class Zip { public Zip() { } #region 加压 ...

  9. Ubuntu下解决解压zip文件中文文件名乱码问题

    在Ubuntu下解压Windows下压缩的zip文件时,会出现解压出的带中文文件名的文件名乱码,这是因为Ubuntu和Windows默认的编码不同,Ubuntu下默认的编码是UTF-8,而Window ...

随机推荐

  1. 《精通Python设计模式》学习之抽象工厂

    这种工厂模式用得少, 可能在游戏类的编程中用得比较多吧. 这个思路清晰一定要OK的. class Frog: def __init__(self, name): self.name = name de ...

  2. zabbix监控华为服务器硬件状态

    https://blog.csdn.net/yanggd1987/article/details/79424823

  3. JS几种变量交换方式以及性能分析对比

    前言 "两个变量之间的值得交换",这是一个经典的话题,现在也有了很多的成熟解决方案,本文主要是列举几种常用的方案,进行大量计算并分析对比. 起由 最近做某个项目时,其中有一个需求是 ...

  4. Jquery~跨域异步上传文件

    先说明白 这个跨域异步上传功能我们借助了Jquery.form插件,它在异步表单方面很有成效,而跨域我们会在HTTP响应头上添加access-control-allow-method,当然这个头标记只 ...

  5. 使用Caffe训练适合自己样本集的AlexNet网络模型,并对其进行分类

    1.在开始之前,先简单回顾一下几个概念. Caffe(Convolution Architecture For Feature Extraction-卷积神经网络框架):是一个清晰,可读性高,快速的深 ...

  6. LoadRunner11-遇到问题及解决办法(汇总)

    LoadRunner11-遇到问题及解决办法 1.LoadRunner超时错误:在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同.错 ...

  7. jenkins远程执行shell

    旧版本: 安装插件 SSH plugin 1. 增加一个domain,点击OK 点击 adding some credentials 填写要远程连接的服务器的用户名和密码(以下例子为连接到91机器的r ...

  8. IBM斥资340亿美元收购红帽

    IBM宣布收购Linux巨头Red Hat,以每股190美元的现金收购其所有已发行股份,总价值约为340亿美元.这一交易是IBM历史上金额最高的一笔收购交易,也成为其在营收持续下滑的压力下,布局云计算 ...

  9. 使用补丁修改DSDT/SSDT [DSDT/SSDT综合教程]

    请尊重原贴作者 与 本贴楼主.原作者把自己丰富的经验分享给了大家,本贴作者每个贴子平均花了3个小时翻译.      所以,转载请注明出处:原贴地址:http://www.tonymacx86.com/ ...

  10. OpenStack Keystone V3 简介

    Keystone V3 简介 Keystone 中主要涉及到如下几个概念:User.Tenant.Role.Token.下面对这几个概念进行简要说明. User:顾名思义就是使用服务的用户,可以是人. ...