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 压缩文件名 源文件:压缩文件 ...
随机推荐
- UVA 11426 GCD - Extreme (II) (欧拉函数+筛法)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/O 题意是给你n,求所有gcd(i , j)的和,其中 ...
- 为什么要坚持用ASP.NET MVC!(②)
尽管ASP.NET MVC架构和Web Form架构区别很大,但是还是有很多共同之处.毕竟它们都是以ASP.NET API与.NET框架为基础构建的.比较一下ASP.NET MVC和Web Form框 ...
- 提高Scrum站会效率的一个小工具
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:提高Scrum站会效率的一个小工具.
- Galera 10.0.20 on CentOS 6.6
Galera 10.0.20 on CentOS 6.6 0.使用场景 数据库软件:mariadb-galera-10.0.20-linux-x86_64.tar.gz 集群管理:galera-3-2 ...
- C++访问权限
1.C++类本身没有访问权限的概念,就是class Base. 2.类成员的访问权限有:public.protected.private 3.类的继承方式有:public.protected.priv ...
- POJ 3281 Dining 网络流最大流
B - DiningTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.ac ...
- C# Process 类的思考
在这里,我先给自己留个印象 下面我们用C#实现一个调用Dos命令的小程序,让大家对系统进程能有个直观的了解.要使用Process类,首先要引入System.Diagnostic命名空间,然后定义一个新 ...
- zoj3672 Gao The Sequence
原地踏步了半年,感觉一切都陌生了~ 题意:a[i]-一个任意的数,这个数要等于a[1]~a[i-1]每个数减去任意一个数,经过多次这样的变换到达目标b序列,能到达就yes不能到达距no. 一开始各种分 ...
- 【转】Linux下(C/C++)使用system()函数一定要谨慎
转自:http://my.oschina.net/renhc/blog/53580 曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入.只是简单的知道用 ...
- 架构师之路(39)---IoC框架
1 IoC理论的背景 我们都知道,在採用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,全部的对象通过彼此的合作,终于实现系统的业务逻辑. 图1:软件系统中耦合的对象 假设 ...