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 ...
随机推荐
- Linux块设备IO子系统(一) _驱动模型
块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备)进行的,他使用缓 ...
- 【nginx】解决Nginx重启时提示nginx: [emerg] bind() to 0.0.0.0:80错误
Nginx是一款轻量级的Web服务器,特点是占有内存少,并发能力强,因而使用比较广泛,蜗牛今天在一个VPS上重启Nginx时提示“nginx: [emerg] bind() to 0.0.0.0:80 ...
- bootstrap 使用总结
1.如何设置一行两列? <div class="container"> <div class="row"> <div class= ...
- P5173 传球
题目背景 临近中考,pG的班主任决定上一节体育课,放松一下. 题解:https://blog.csdn.net/kkkksc03/article/details/85008120 题目描述 老师带着p ...
- nw.js---创建一个点击菜单
使用nw.js创建一个可点击的菜单: <!doctype html> <html lang="en"> <head> <meta char ...
- axios 中断请求
1 <button onclick="test()">click me</button> <script src="https://unpk ...
- oracle数据库字符集查询
1>数据库服务器字符集 select * from nls_database_parameters,其来源于props$,是表示数据库的字符集. 查询结果如下 NLS_LANGUAGE AMER ...
- 更改ORACLE归档路径及归档模式
更改ORACLE归档路径及归档模式 在ORACLE10g和11g版本,ORACLE默认的日志归档路径为闪回恢复区($ORACLE_BASE/flash_recovery_area).对于这个路径, ...
- css的position,float属性的理解
我们知道,html是按照普通流来加载的,这个时候我们有些需求就不好实现.因此出现了非普通流: 1.普通流:按照顺序正常的排列,长度或不够就往下挤.position默认的static 2.非普通流:脱离 ...
- 数据库的相关语句(where,order by)
select * from EMP t-- t列的别名--返回所有列 select ename || sal as HEHE from emp;--列的合并(使用连接) select concat(e ...