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 ...
随机推荐
- Android学习:AlertDialog对话框
AlertDialog可以生成各种内容的对话框,它生成的对话框包含4个区域:图标区,标题区,内容区,按钮区 <?xml version="1.0" encoding=&quo ...
- nginx的https和http共存反向代理配置
一.设置http反向代理: upstream ly.com { server ; server ; } upstream home.ly.com { server ; server ; } 对应增加: ...
- jvm.option是什么,它是如何加载的
jvm.option是一些程序里边的java的配置参数的一个集合,不同的应用都会定义自己的jvm.options用来控制一些jvm的参数 以下,以elasticsearch为例,来说明它是如何加载的 ...
- java中jdbc源码解读
在jdbc中一个重要的接口类就是java.sql.Driver,其中有一个重要的方法:Connection connect(String url, java.util.Propeties info); ...
- 查看集成环境 phpstudy 中 mysql 版本号
1. 打开面板 2.其他选项菜单 3. Mysql工具 4. mysql命令行 5.输入密码,回车.phpstudy mysql默认 root 6.运行 select version();
- JWT(Json Web Token—)的定义及组成
JWT定义及其组成 JWT(JSON Web Token)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 一个JWT实际上就是一个字符串,它由三部分组成,头部. ...
- markdown 基本语法(转载)
最近感觉一直使用富文本编辑器写东西,感觉有点烦,所以就试着学习了一下简单的markdown编辑器的使用 原文地址:http://www.jianshu.com/p/815788f4b01d markd ...
- vue的数据绑定和组件化
组件:就是自定义标签, 也是Vue的实例对象; 组件好处:就像工作分工,函数封装等 组件分为全局组件和局部组件: 全局组件,在Vue身上的组件,所有的vue挂载的元素内都可以使用:正是因为这一点,co ...
- Mycat了解下
首先说下,因为本身不怎么推荐中间件,所以我对这东西也只是了解,业内mycat用的最好的应该顺风算一个,但是他们是做过二次开发的,咱菜鸡比不了,据说最近出来一个叫cetus的还不错,有空可以关注下 Ⅰ. ...
- 高性能Nginx服务器-负载均衡
Location正则表达式 location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作. locatio ...