需要用到ant.jar(这里使用的是ant-1.6.5.jar)

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.util.ArrayList;
  9. import java.util.Enumeration;
  10. import java.util.List;
  11.  
  12. import org.apache.tools.zip.ZipEntry;
  13. import org.apache.tools.zip.ZipFile;
  14. import org.apache.tools.zip.ZipOutputStream;
  15.  
  16. /**
  17. * 压缩或解压zip:
  18. * 由于直接使用java.util.zip工具包下的类,会出现中文乱码问题,所以使用ant.jar中的org.apache.tools.zip下的工具类
  19. * @author Administrator
  20. */
  21.  
  22. public class ZipUtil {
  23. private static byte[] _byte = new byte[1024] ;
  24. /**
  25. * 压缩文件或路径
  26. * @param zip 压缩的目的地址
  27. * @param srcFiles 压缩的源文件
  28. */
  29. public static void zipFile( String zip , List<File> srcFiles ){
  30. try {
  31. if( zip.endsWith(".zip") || zip.endsWith(".ZIP") ){
  32. ZipOutputStream _zipOut = new ZipOutputStream(new FileOutputStream(new File(zip))) ;
  33. _zipOut.setEncoding("GBK");
  34. for( File _f : srcFiles ){
  35. handlerFile(zip , _zipOut , _f , "");
  36. }
  37. _zipOut.close();
  38. }else{
  39. System.out.println("target file[" + zip + "] is not .zip type file");
  40. }
  41. } catch (FileNotFoundException e) {
  42. } catch (IOException e) {
  43. }
  44. }
  45.  
  46. /**
  47. *
  48. * @param zip 压缩的目的地址
  49. * @param zipOut
  50. * @param srcFile 被压缩的文件信息
  51. * @param path 在zip中的相对路径
  52. * @throws IOException
  53. */
  54. private static void handlerFile(String zip , ZipOutputStream zipOut , File srcFile , String path ) throws IOException{
  55. System.out.println(" begin to compression file[" + srcFile.getName() + "]");
  56. if( !"".equals(path) && ! path.endsWith(File.separator)){
  57. path += File.separator ;
  58. }
  59. if( ! srcFile.getPath().equals(zip) ){
  60. if( srcFile.isDirectory() ){
  61. File[] _files = srcFile.listFiles() ;
  62. if( _files.length == 0 ){
  63. zipOut.putNextEntry(new ZipEntry( path + srcFile.getName() + File.separator));
  64. zipOut.closeEntry();
  65. }else{
  66. for( File _f : _files ){
  67. handlerFile( zip ,zipOut , _f , path + srcFile.getName() );
  68. }
  69. }
  70. }else{
  71. InputStream _in = new FileInputStream(srcFile) ;
  72. zipOut.putNextEntry(new ZipEntry(path + srcFile.getName()));
  73. int len = 0 ;
  74. while( (len = _in.read(_byte)) > 0 ){
  75. zipOut.write(_byte, 0, len);
  76. }
  77. _in.close();
  78. zipOut.closeEntry();
  79. }
  80. }
  81. }
  82.  
  83. /**
  84. * 解压缩ZIP文件,将ZIP文件里的内容解压到targetDIR目录下
  85. * @param zipName 待解压缩的ZIP文件名
  86. * @param targetBaseDirName 目标目录
  87. */
  88. public static List<File> upzipFile(String zipPath, String descDir) {
  89. return upzipFile( new File(zipPath) , descDir ) ;
  90. }
  91.  
  92. /**
  93. * 对.zip文件进行解压缩
  94. * @param zipFile 解压缩文件
  95. * @param descDir 压缩的目标地址,如:D:\\测试 或 /mnt/d/测试
  96. * @return
  97. */
  98. @SuppressWarnings("rawtypes")
  99. public static List<File> upzipFile(File zipFile, String descDir) {
  100. List<File> _list = new ArrayList<File>() ;
  101. try {
  102. ZipFile _zipFile = new ZipFile(zipFile , "GBK") ;
  103. for( Enumeration entries = _zipFile.getEntries() ; entries.hasMoreElements() ; ){
  104. ZipEntry entry = (ZipEntry)entries.nextElement() ;
  105. File _file = new File(descDir + File.separator + entry.getName()) ;
  106. if( entry.isDirectory() ){
  107. _file.mkdirs() ;
  108. }else{
  109. File _parent = _file.getParentFile() ;
  110. if( !_parent.exists() ){
  111. _parent.mkdirs() ;
  112. }
  113. InputStream _in = _zipFile.getInputStream(entry);
  114. OutputStream _out = new FileOutputStream(_file) ;
  115. int len = 0 ;
  116. while( (len = _in.read(_byte)) > 0){
  117. _out.write(_byte, 0, len);
  118. }
  119. _in.close();
  120. _out.flush();
  121. _out.close();
  122. _list.add(_file) ;
  123. }
  124. }
  125. } catch (IOException e) {
  126. }
  127. return _list ;
  128. }
  129.  
  130. /**
  131. * 对临时生成的文件夹和文件夹下的文件进行删除
  132. */
  133. public static void deletefile(String delpath) {
  134. try {
  135. File file = new File(delpath);
  136. if (!file.isDirectory()) {
  137. file.delete();
  138. } else if (file.isDirectory()) {
  139. String[] filelist = file.list();
  140. for (int i = 0; i < filelist.length; i++) {
  141. File delfile = new File(delpath + File.separator + filelist[i]);
  142. if (!delfile.isDirectory()) {
  143. delfile.delete();
  144. } else if (delfile.isDirectory()) {
  145. deletefile(delpath + File.separator + filelist[i]);
  146. }
  147. }
  148. file.delete();
  149. }
  150. } catch (Exception e) {
  151. e.printStackTrace();
  152. }
  153. }
  154.  
  155. public static void main(String[] args) {}
  156.  
  157. }

Java操作zip压缩和解压缩文件工具类的更多相关文章

  1. 【转】Java压缩和解压文件工具类ZipUtil

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  2. Java操作zip-压缩和解压文件

    一.说明 rar格式的压缩包收费,java支持zip格式的压缩和解压 二.工具类 import java.io.*; import java.util.Enumeration; import java ...

  3. Java 多文件压缩成一个文件工具类

    简单修改来自博客园勇闯天涯zfc的博客 一.内容 ①使用 Java 将多个文件打包压缩成一个压缩文件: ②主要使用 java.io 下的类 二.源代码:ZIPUtil .java import jav ...

  4. 使用commons-compress操作zip文件(压缩和解压缩)

    http://www.cnblogs.com/luxh/archive/2012/06/28/2568758.html Apache Commons Compress是一个压缩.解压缩文件的类库. 可 ...

  5. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  6. IO操作之使用zip包压缩和解压缩文件

    转自:http://www.cdtarena.com/java.html​​Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使 ...

  7. Java用ZIP格式压缩和解压缩文件

    转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ...

  8. Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)

    Java ZIP压缩和解压缩文件(解决中文文件名乱码问题) 学习了:http://www.tuicool.com/articles/V7BBvy 引用原文: JDK中自带的ZipOutputStrea ...

  9. Java压缩和解压缩文件工具

    Java压缩和解压缩文件工具 学习了: https://www.oschina.net/code/snippet_1021818_48130 http://blog.csdn.net/gaowen_h ...

  10. Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)

    1.压缩和解压缩命令    常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令        zip 压缩文件名 源文件:压缩文件   ...

随机推荐

  1. UVA 11426 GCD - Extreme (II) (欧拉函数+筛法)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/O 题意是给你n,求所有gcd(i , j)的和,其中 ...

  2. 为什么要坚持用ASP.NET MVC!(②)

    尽管ASP.NET MVC架构和Web Form架构区别很大,但是还是有很多共同之处.毕竟它们都是以ASP.NET API与.NET框架为基础构建的.比较一下ASP.NET MVC和Web Form框 ...

  3. 提高Scrum站会效率的一个小工具

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:提高Scrum站会效率的一个小工具.

  4. 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 ...

  5. C++访问权限

    1.C++类本身没有访问权限的概念,就是class Base. 2.类成员的访问权限有:public.protected.private 3.类的继承方式有:public.protected.priv ...

  6. POJ 3281 Dining 网络流最大流

    B - DiningTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.ac ...

  7. C# Process 类的思考

    在这里,我先给自己留个印象 下面我们用C#实现一个调用Dos命令的小程序,让大家对系统进程能有个直观的了解.要使用Process类,首先要引入System.Diagnostic命名空间,然后定义一个新 ...

  8. zoj3672 Gao The Sequence

    原地踏步了半年,感觉一切都陌生了~ 题意:a[i]-一个任意的数,这个数要等于a[1]~a[i-1]每个数减去任意一个数,经过多次这样的变换到达目标b序列,能到达就yes不能到达距no. 一开始各种分 ...

  9. 【转】Linux下(C/C++)使用system()函数一定要谨慎

    转自:http://my.oschina.net/renhc/blog/53580   曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入.只是简单的知道用 ...

  10. 架构师之路(39)---IoC框架

    1 IoC理论的背景     我们都知道,在採用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,全部的对象通过彼此的合作,终于实现系统的业务逻辑.   图1:软件系统中耦合的对象 假设 ...