Java操作zip压缩和解压缩文件工具类
需要用到ant.jar(这里使用的是ant-1.6.5.jar)
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.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List; import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream; /**
* 压缩或解压zip:
* 由于直接使用java.util.zip工具包下的类,会出现中文乱码问题,所以使用ant.jar中的org.apache.tools.zip下的工具类
* @author Administrator
*/ public class ZipUtil {
private static byte[] _byte = new byte[1024] ;
/**
* 压缩文件或路径
* @param zip 压缩的目的地址
* @param srcFiles 压缩的源文件
*/
public static void zipFile( String zip , List<File> srcFiles ){
try {
if( zip.endsWith(".zip") || zip.endsWith(".ZIP") ){
ZipOutputStream _zipOut = new ZipOutputStream(new FileOutputStream(new File(zip))) ;
_zipOut.setEncoding("GBK");
for( File _f : srcFiles ){
handlerFile(zip , _zipOut , _f , "");
}
_zipOut.close();
}else{
System.out.println("target file[" + zip + "] is not .zip type file");
}
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
} /**
*
* @param zip 压缩的目的地址
* @param zipOut
* @param srcFile 被压缩的文件信息
* @param path 在zip中的相对路径
* @throws IOException
*/
private static void handlerFile(String zip , ZipOutputStream zipOut , File srcFile , String path ) throws IOException{
System.out.println(" begin to compression file[" + srcFile.getName() + "]");
if( !"".equals(path) && ! path.endsWith(File.separator)){
path += File.separator ;
}
if( ! srcFile.getPath().equals(zip) ){
if( srcFile.isDirectory() ){
File[] _files = srcFile.listFiles() ;
if( _files.length == 0 ){
zipOut.putNextEntry(new ZipEntry( path + srcFile.getName() + File.separator));
zipOut.closeEntry();
}else{
for( File _f : _files ){
handlerFile( zip ,zipOut , _f , path + srcFile.getName() );
}
}
}else{
InputStream _in = new FileInputStream(srcFile) ;
zipOut.putNextEntry(new ZipEntry(path + srcFile.getName()));
int len = 0 ;
while( (len = _in.read(_byte)) > 0 ){
zipOut.write(_byte, 0, len);
}
_in.close();
zipOut.closeEntry();
}
}
} /**
* 解压缩ZIP文件,将ZIP文件里的内容解压到targetDIR目录下
* @param zipName 待解压缩的ZIP文件名
* @param targetBaseDirName 目标目录
*/
public static List<File> upzipFile(String zipPath, String descDir) {
return upzipFile( new File(zipPath) , descDir ) ;
} /**
* 对.zip文件进行解压缩
* @param zipFile 解压缩文件
* @param descDir 压缩的目标地址,如:D:\\测试 或 /mnt/d/测试
* @return
*/
@SuppressWarnings("rawtypes")
public static List<File> upzipFile(File zipFile, String descDir) {
List<File> _list = new ArrayList<File>() ;
try {
ZipFile _zipFile = new ZipFile(zipFile , "GBK") ;
for( Enumeration entries = _zipFile.getEntries() ; entries.hasMoreElements() ; ){
ZipEntry entry = (ZipEntry)entries.nextElement() ;
File _file = new File(descDir + File.separator + entry.getName()) ;
if( entry.isDirectory() ){
_file.mkdirs() ;
}else{
File _parent = _file.getParentFile() ;
if( !_parent.exists() ){
_parent.mkdirs() ;
}
InputStream _in = _zipFile.getInputStream(entry);
OutputStream _out = new FileOutputStream(_file) ;
int len = 0 ;
while( (len = _in.read(_byte)) > 0){
_out.write(_byte, 0, len);
}
_in.close();
_out.flush();
_out.close();
_list.add(_file) ;
}
}
} catch (IOException e) {
}
return _list ;
} /**
* 对临时生成的文件夹和文件夹下的文件进行删除
*/
public static void deletefile(String delpath) {
try {
File file = new File(delpath);
if (!file.isDirectory()) {
file.delete();
} else if (file.isDirectory()) {
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File delfile = new File(delpath + File.separator + filelist[i]);
if (!delfile.isDirectory()) {
delfile.delete();
} else if (delfile.isDirectory()) {
deletefile(delpath + File.separator + filelist[i]);
}
}
file.delete();
}
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {} }
Java操作zip压缩和解压缩文件工具类的更多相关文章
- 【转】Java压缩和解压文件工具类ZipUtil
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- Java操作zip-压缩和解压文件
一.说明 rar格式的压缩包收费,java支持zip格式的压缩和解压 二.工具类 import java.io.*; import java.util.Enumeration; import java ...
- Java 多文件压缩成一个文件工具类
简单修改来自博客园勇闯天涯zfc的博客 一.内容 ①使用 Java 将多个文件打包压缩成一个压缩文件: ②主要使用 java.io 下的类 二.源代码:ZIPUtil .java import jav ...
- 使用commons-compress操作zip文件(压缩和解压缩)
http://www.cnblogs.com/luxh/archive/2012/06/28/2568758.html Apache Commons Compress是一个压缩.解压缩文件的类库. 可 ...
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
reference : http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...
- IO操作之使用zip包压缩和解压缩文件
转自:http://www.cdtarena.com/java.htmlJava API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使 ...
- Java用ZIP格式压缩和解压缩文件
转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ...
- Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
Java ZIP压缩和解压缩文件(解决中文文件名乱码问题) 学习了:http://www.tuicool.com/articles/V7BBvy 引用原文: JDK中自带的ZipOutputStrea ...
- Java压缩和解压缩文件工具
Java压缩和解压缩文件工具 学习了: https://www.oschina.net/code/snippet_1021818_48130 http://blog.csdn.net/gaowen_h ...
- Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)
1.压缩和解压缩命令 常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令 zip 压缩文件名 源文件:压缩文件 ...
随机推荐
- Hellow world!
其实一年前开始就有了些许开篇技术博客的想法,一直觉得写这些的人都一定好牛×.现刚毕业,我也是时候朝牛×之路迈进了.当然,我才刚入门不久,前路漫漫,需一步一脚印,先打算把平常遇到的一些问题与关注的东西都 ...
- 【转】UIBezierPath精讲
http://www.henishuo.com/uibezierpath-draw/ 基础知识 使用UIBezierPath可以创建基于矢量的路径,此类是Core Graphics框架关于路径的封装. ...
- (转)从工程中删除Cocoapods
1. 删除工程文件夹下的Podfile.Podfile.lock及Pods文件夹 2. 删除xcworkspace文件 3. 使用xcodeproj文件打开工程,删除Frameworks组下的Pods ...
- C 语言中包含的标准头文件(24个)
<assert.h><complex.h><ctype.h><errno.h><fenv.h><float.h><intt ...
- C:移位运算符
1在向右移位时,空出的位是由0填充,还是由符号位的副本填充? 如果被移位的对象是无符号数,那么空出的位将被0填充.如果被位移的对象是有符号数,那么C语言实现既可以用0填充空出的位,也可以用符号位的副本 ...
- SGU 171 Sarov zones (贪心)
题目 SGU 171 相当好的贪心的题目!!!!! 题目意思就是说有K个赛区招收参赛队员,每个地区招收N[i]个,然后每个地区都有一个Q值,而N[i]的和就是N,表示总有N个参赛队员,每个队员都有 ...
- HDU 5832 A water problem (水题,大数)
题意:给定一个大数,问你取模73 和 137是不是都是0. 析:没什么可说的,先用char 存储下来,再一位一位的算就好了. 代码如下: #pragma comment(linker, "/ ...
- hibernate id生成器配置
1.uuid配置 <id name="tomdId" type="java.lang.String"> <column name=" ...
- Table 样式设置
http://www.gzsums.edu.cn/webclass/html/table.html
- Android如何判断一个应用在运行
在一个应用中,或一个Service .Receiver中有时候需要判断一个应用是否正在运行,以便进行一些相关的处理,这个时候我们需要得到一个ActivityManager,这个Manager顾名思意就 ...