java实现zip压缩和解压工具
引入ant.jar
package com.develop.web.util; import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration; import org.apache.log4j.Logger;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream; public class ZipUtil {
private static int bufferSize = 2048;
private static Logger logger = Logger.getLogger(ZipUtil.class); /**
* 压缩
* @param srcFileOrDir 原文件或文件夹
* @param destZipFilePath 输出到的目标路径,默认zip文件为原文件或文件夹名称
*/
public static boolean zip(String srcFileOrDir, String destZipFilePath){
File file = new File(srcFileOrDir);
if(!file.exists()){
return false;
} String destZipFileName = file.getName(); return zip(srcFileOrDir, destZipFilePath, destZipFileName);
} /**
* 压缩
* @param srcFileOrDir 原文件或文件夹
* @param destZipFilePath 输出到的目标路径
* @param destZipFileName 生成的zip文件名称
*/
public static boolean zip(String srcFileOrDir, String destZipFilePath, String destZipFileName){
File file = new File(srcFileOrDir);
if(!file.exists()){
logger.info("原文件或文件夹不存在。");
return false;
} if(!destZipFilePath.endsWith(File.separator)){
destZipFilePath += File.separator;
} File destZipFileParentDir = new File(destZipFilePath);
if(!destZipFileParentDir.exists()){
destZipFileParentDir.mkdirs();
} if(!destZipFileName.endsWith(".zip")&&!destZipFileName.endsWith(".ZIP")){
destZipFileName += ".zip";
} boolean zipResult = false;
if(file.isFile()){
zipResult = zipFile(srcFileOrDir, destZipFilePath, destZipFileName);
}else if(file.isDirectory()){
zipResult = zipDir(srcFileOrDir, destZipFilePath, destZipFileName);
} logger.info("["+srcFileOrDir+"]-->["+destZipFilePath + destZipFileName+"]压缩结果:["+zipResult+"]"); return zipResult;
} private static boolean zipFile(String srcFileName, String destZipFilePath, String destZipFileName){
boolean zipResult = false;
File srcFile = new File(srcFileName); ZipOutputStream zipOutputStream = null;
try {
zipOutputStream = new ZipOutputStream(new FileOutputStream(destZipFilePath + destZipFileName));
zipOutputStream.setEncoding(System.getProperty("sun.jnu.encoding")); String fileName = srcFile.getName();
ZipEntry entry = new ZipEntry(fileName); BufferedInputStream bis = null;
try {
zipOutputStream.putNextEntry(entry);
bis = new BufferedInputStream(new FileInputStream(srcFile)); byte[] buf = new byte[bufferSize];
int len;
while ((len = bis.read(buf)) >= 0) {
zipOutputStream.flush();
zipOutputStream.write(buf, 0, len);
}
zipResult = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(zipOutputStream!=null){
zipOutputStream.closeEntry();
} if(bis!=null){
bis.close();
} } catch (IOException e) {
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(zipOutputStream!=null){
zipOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} return zipResult;
} private static boolean zipDir(String srcDir, String destZipFilePath, String destZipFileName){
boolean zipResult = false;
if(!srcDir.endsWith(File.separator)){
srcDir += File.separator;
}
File srcFile = new File(srcDir);
File[] files = srcFile.listFiles(); ZipOutputStream zipOutputStream = null;
try {
zipOutputStream = new ZipOutputStream(new FileOutputStream(destZipFilePath + destZipFileName));
zipOutputStream.setEncoding(System.getProperty("sun.jnu.encoding"));
if(files!=null&&files.length>0){
for(File f :files){
compressFiles(f, f.getParent() ,zipOutputStream);
}
}
zipResult = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(zipOutputStream!=null){
zipOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return zipResult;
} private static void compressFiles(File file, String basePath, ZipOutputStream stream){
if(file==null||stream==null){
return;
}
if(file.isDirectory()){
ZipEntry entry = new ZipEntry(getEntryPath(file,basePath) + File.separator);
try {
stream.putNextEntry(entry);
} catch (IOException e) {
e.printStackTrace();
} File[] files = file.listFiles();
if(files!=null&&files.length>0){
for(File f :files){
compressFiles(f, basePath, stream);
}
}
}else{
String fileName = getEntryPath(file, basePath);
ZipEntry entry = new ZipEntry(fileName); BufferedInputStream bis = null;
try {
stream.putNextEntry(entry);
bis = new BufferedInputStream(new FileInputStream(file)); byte[] buf = new byte[bufferSize];
int len;
while ((len = bis.read(buf)) >= 0) {
stream.flush();
stream.write(buf, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(stream!=null){
stream.closeEntry();
} if(bis!=null){
bis.close();
} } catch (IOException e) {
e.printStackTrace();
}
}
}
} private static String getEntryPath(File file, String basePath){
String path = file.getPath().substring(basePath.length() + 1);
return path;
} /**
* 解压
* @param srcZipFile 压缩文件
* @param destDir 目标路径
* @return
*/
public static boolean unzip(String srcZipFile, String destDir) {
boolean unzipResult = false;
ZipFile zipFile = null;
Enumeration<ZipEntry> entries = null;
try {
zipFile = new ZipFile(srcZipFile, System.getProperty("sun.jnu.encoding"));
if(zipFile!=null){
entries = zipFile.getEntries();
}
} catch (IOException e) {
e.printStackTrace();
} if(zipFile==null||entries == null){
logger.info("压缩文件不存在。");
return false;
} if(!destDir.endsWith(File.separator)){
destDir += File.separator;
} ZipEntry zipEntry = null;
while (entries.hasMoreElements()) {
zipEntry = entries.nextElement(); if (isDirectory(zipEntry)) {
try {
mkDirs(destDir + zipEntry.getName());
} catch (Exception e) {
e.printStackTrace();
} } else {
String name = zipEntry.getName();
File file = new File(destDir + name);
try {
mkDirs(file.getParent());
} catch (Exception e) {
e.printStackTrace();
} try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
} InputStream in = null;
FileOutputStream out = null;
try {
in = zipFile.getInputStream(zipEntry);
out = new FileOutputStream(file);
int c;
byte[] by = new byte[1024];
while ((c = in.read(by)) != -1) {
out.flush();
out.write(by, 0, c);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(out!=null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
} unzipResult = true;
logger.info("["+srcZipFile+"]-->["+destDir+"]解压结果:["+unzipResult+"]"); try {
zipFile.close();
} catch (IOException e) {
e.printStackTrace();
} return unzipResult;
} /**
* 重写判断zipEntry是否是文件夹,他的类方法【zipEntry.isDirectory()】是写死的"/",windows情况下会判断错误。
* @param zipEntry
* @return
*/
private static boolean isDirectory(ZipEntry zipEntry){
boolean isDirectory = false;
String name = zipEntry.getName();
if(name.endsWith(File.separator)){
isDirectory = true;
}
return isDirectory;
} private static void mkDirs(String dir){
if (dir == null || dir.equals("")){
return;
} File file = new File(dir);
if (!file.exists()){
file.mkdirs();
} } public static void main(String[] args) {
zip("D:\\test", "D:\\test1");
unzip("D:\\test1\\test.zip", "D:\\test1\\");
} }
java实现zip压缩和解压工具的更多相关文章
- Java 的zip压缩和解压缩
Java 的zip压缩和解压缩 好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代 ...
- Java操作zip压缩和解压缩文件工具类
需要用到ant.jar(这里使用的是ant-1.6.5.jar) import java.io.File; import java.io.FileInputStream; import java.io ...
- Zip 压缩和解压技术在 HTML5 中的应用
JSZip 是一款可以创建.读取.修改 .zip 文件的 javaScript 工具.在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这 ...
- linux zip压缩和解压的各种操控
1.把/home文件夹以下的mydata文件夹压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata文件夹 2.把/home文件夹以下的mydata.zip解 ...
- ZIP压缩和解压字符串
由于ZIP压缩会产生头信息, 所以当字符串长度没有达到一定规模的时候, 压缩后的长度可能比原来的还长 // 将一个字符串按照zip方式压缩和解压缩 public class ZipUtil { // ...
- 压缩和解压工具bandizip
同质化的压缩软件 提及 Windows 平台的压缩软件,大家往往想起老牌的 WinRAR.开源免费的 7-Zip.国产的快压.好压.360 压缩之类,甚至还有时代的眼泪 WinZip.一直以来,压缩软 ...
- ruby利用Zip Gem写一个简单的压缩和解压的小工具
在UNIX下的我们怎么会沦落到用ruby写压缩和解压工具呢?直接上shell啊!但是请允许本猫这次可耻的用ruby来玩玩吧!其实ruby GEM中有很多压缩解压包,我选的是Zip,也许是因为名字符合K ...
- 【转】Java压缩和解压文件工具类ZipUtil
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- java 压缩和解压zip包
网上有关压缩和解压zip包的博文一大堆,我随便找了一个.看了看,依照自己的须要改动了一下,与各位分享一下,希望各位大神指正: package com.wangpeng.utill; import ja ...
随机推荐
- django-registration
快速开始指南 在安装django-registration之前,你需要先安装Django.django-registration 0.8需要Django1.1或更新版本的支持. Django进一步的信 ...
- ubuntu中python3安装package
1.实验环境 Ubuntu16.04x86 + python3.5 ubuntu中同时存在python2.7 和 python3.5 2.pip使用说明 sudo pip install packag ...
- js 表达式与语句
引子:表达式和语句很基础,但是有时会犯错,比如: function(){}//报错 (function(){})//不报错 function f(x){ return x + 1 }()//报错 fu ...
- java学习之路--集合基础之List和Set部分
List 一个接口,它继承于Collection的接口.它代表着有序的队列.里面的元素是有序的,可以重复,因为该集合的体系有索引. List的实现类 ArrayList:底层数据结构为数组数据结构,特 ...
- 四、XML语言学习(1)
XML语言 1.XML是什么?XML是指可扩展标记语言XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,很类似HTML.它被设计的宗旨是传输数据,而非 ...
- TCP、UDP详解与抓包工具使用
参考:https://www.cnblogs.com/HPAHPA/p/7737641.html TCP.UDP详解 1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间 ...
- java web应用连接mysql会突然connection连接失败
tomcat6.0 mysql5.1 项目:java web项目 问题:原本项目运行了好几天了,一直没发现问题,突然今天报数据库连接异常,进入看日志发现 ### Error querying data ...
- 【转载】python抓取网页时候,判断网页编码格式
在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取.但是在抓取过程中会遇到编码的问题, ...
- To be better —msup荣获平安科技“2018年度优秀合作伙伴”称号
2018年12月4日,平安科技在深圳平安金融中心举办了“2018年平安科技优秀培训合作伙伴交流会”,msup收到了邀请参与此次评选,并从80余家合作伙伴中脱颖而出,在交付量.满意度.师资内容.服务水准 ...
- [Day7]循环、数组方法、排序查找
1. ASCII(American Standard Code for Information Interchange) (1)数字0-9对应ASCII编码十进制为48-57, 字母a-z对应ASCI ...