java压缩解压zip文件,中文乱码还需要ant.jar包

va] view plaincopyprint?

  1. package cn.cn;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.util.Enumeration;
  9. import java.util.zip.Deflater;
  10. import org.apache.tools.zip.ZipEntry;
  11. import org.apache.tools.zip.ZipFile;
  12. import org.apache.tools.zip.ZipOutputStream;
  13. public class ZipUtil {
  14. private ZipFile         zipFile;
  15. private ZipOutputStream zipOut;     //压缩Zip
  16. private  int            bufSize;    //size of bytes
  17. private byte[]          buf;
  18. public ZipUtil(){
  19. //要构造函数中去初始化我们的缓冲区
  20. this.bufSize = 1024*4;
  21. this.buf = new byte[this.bufSize];
  22. }
  23. /**
  24. * 对传入的目录或者是文件进行压缩
  25. * @param srcFile  需要 压缩的目录或者文件
  26. * @param destFile 压缩文件的路径
  27. */
  28. public void doZip(String srcFile, String destFile) {// zipDirectoryPath:需要压缩的文件夹名
  29. File zipFile = new File(srcFile);
  30. try {
  31. //生成ZipOutputStream,会把压缩的内容全都通过这个输出流输出,最后写到压缩文件中去
  32. this.zipOut = new ZipOutputStream(new BufferedOutputStream(
  33. new FileOutputStream(destFile)));
  34. //设置压缩的注释
  35. zipOut.setComment("comment");
  36. //设置压缩的编码,如果要压缩的路径中有中文,就用下面的编码
  37. zipOut.setEncoding("GBK");
  38. //启用压缩
  39. zipOut.setMethod(ZipOutputStream.DEFLATED);
  40. //压缩级别为最强压缩,但时间要花得多一点
  41. zipOut.setLevel(Deflater.BEST_COMPRESSION);
  42. handleFile(zipFile, this.zipOut,"");
  43. //处理完成后关闭我们的输出流
  44. this.zipOut.close();
  45. } catch (IOException ioe) {
  46. ioe.printStackTrace();
  47. }
  48. }
  49. /**
  50. *  由doZip调用,递归完成目录文件读取
  51. * @param zipFile
  52. * @param zipOut
  53. * @param dirName  这个主要是用来记录压缩文件的一个目录层次结构的
  54. * @throws IOException
  55. */
  56. private void handleFile(File zipFile, ZipOutputStream zipOut,String dirName) throws IOException {
  57. System.out.println("遍历文件:"+zipFile.getName());
  58. //如果是一个目录,则遍历
  59. if(zipFile.isDirectory())
  60. {
  61. File[] files = zipFile.listFiles();
  62. if (files.length == 0) {// 如果目录为空,则单独创建之.
  63. //只是放入了空目录的名字
  64. this.zipOut.putNextEntry(new ZipEntry(dirName+zipFile.getName()+File.separator));
  65. this.zipOut.closeEntry();
  66. } else {// 如果目录不为空,则进入递归,处理下一级文件
  67. for (File file : files) {
  68. // 进入递归,处理下一级的文件
  69. handleFile(file, zipOut, dirName+zipFile.getName()+File.separator);
  70. }
  71. }
  72. }
  73. //如果是文件,则直接压缩
  74. else
  75. {
  76. FileInputStream fileIn  = new FileInputStream(zipFile);
  77. //放入一个ZipEntry
  78. this.zipOut.putNextEntry(new ZipEntry(dirName+zipFile.getName()));
  79. int length = 0;
  80. //放入压缩文件的流
  81. while ((length = fileIn.read(this.buf)) > 0) {
  82. this.zipOut.write(this.buf, 0, length);
  83. }
  84. //关闭ZipEntry,完成一个文件的压缩
  85. this.zipOut.closeEntry();
  86. }
  87. }
  88. /**
  89. * 解压指定zip文件
  90. * @param unZipfile 压缩文件的路径
  91. * @param destFile   解压到的目录 
  92. */
  93. public void unZip(String unZipfile, String destFile) {// unZipfileName需要解压的zip文件名
  94. FileOutputStream fileOut;
  95. File file;
  96. InputStream inputStream;
  97. try {
  98. //生成一个zip的文件
  99. this.zipFile = new ZipFile(unZipfile);
  100. //遍历zipFile中所有的实体,并把他们解压出来
  101. for (@SuppressWarnings("unchecked")
  102. Enumeration<ZipEntry> entries = this.zipFile.getEntries(); entries
  103. .hasMoreElements();) {
  104. ZipEntry entry =  entries.nextElement();
  105. //生成他们解压后的一个文件
  106. file = new File(destFile+File.separator+entry.getName());
  107. if (entry.isDirectory()) {
  108. file.mkdirs();
  109. } else {
  110. // 如果指定文件的目录不存在,则创建之.
  111. File parent = file.getParentFile();
  112. if (!parent.exists()) {
  113. parent.mkdirs();
  114. }
  115. //获取出该压缩实体的输入流
  116. inputStream = zipFile.getInputStream(entry);
  117. fileOut = new FileOutputStream(file);
  118. int length = 0;
  119. //将实体写到本地文件中去
  120. while ((length = inputStream.read(this.buf)) > 0) {
  121. fileOut.write(this.buf, 0, length);
  122. }
  123. fileOut.close();
  124. inputStream.close();
  125. }
  126. }
  127. this.zipFile.close();
  128. } catch (IOException ioe) {
  129. ioe.printStackTrace();
  130. }
  131. }
时间: 2024-10-10 21:55:46

java压缩解压zip文件,中文乱码还需要ant.jar包的相关文章

ubuntu解压zip文件中文乱码问题

通过unzip行命令解压,指定字符集 unzip -O CP936 xxx.zip 注:xxx.zip为需要解压的文件名 ubuntu解压zip文件中文乱码问题

Ubuntu中解决解压zip文件中文乱码问题

1. 通过unzip行命令解压,指定字符集 unzip -O CP936 xxx.zip (用GBK, GB18030也可以) 有趣的是unzip的manual中并无这个选项的说明, unzip --help对这个参数有一行简单的说明. 2. 在环境变量中,指定unzip参数,总是以指定的字符集显示和解压文件 /etc/environment中加入2行 UNZIP="-O CP936" ZIPINFO="-O CP936"Ubuntu中解决解压zip文件中文乱码问题

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 http://my.oschina.net/junn/blog/104464 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipAr

C#压缩解压zip 文件

1 /// <summary> 2 /// Zip 压缩文件 3 /// </summary> 4 public class Zip 5 { 6 public Zip() 7 { 8 9 } 10 #region 加压方法 11 /// <summary> 12 /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) 13 /// </summary> 14 /// <param name="dirPath&quo

Ubuntu下解决解压zip文件中文文件名乱码问题

在Ubuntu下解压Windows下压缩的zip文件时,会出现解压出的带中文文件名的文件名乱码,这是因为Ubuntu和Windows默认的编码不同,Ubuntu下默认的编码是UTF-8,而Windows下默认的编码是GBK.对于这个问题,主要有以下三种解决方法: 一.命令行指定解压字符集 在Ubuntu下解压来源于Windows的zip文件,中文文件名会出现乱码问题. 出现这个问题的原因是:Windows和Ubuntu使用的默认编码不相同,而且zip文件自身却不带有任何标识其编码的信息.解决方案

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 &amp;&amp; Linux下的ZipArchive配置开启压缩

PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipArchive;//新建一个ZipArchive的对象 /* 通过ZipArchive的对象处理zip文件 $zip->open这个方法的参数表示处理的

java代码解压zip文件

import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.springframework.stereoty

Java 上传解压zip文件,并且解析文件里面的excel和图片

需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读,我把代码全部写到Controller里面.这个demo的file入参的类型是MultipartFile,很多网上的例子是File类型.这两个类型在解析文件的时候还是有点区别的. 第①个方法: 1 /** 2 * 这个deomo入参的类型是MultipartFile,很多网上的例子是File类型 3

Zip文件中文乱码问题解决方法(MAC-&gt;Windows)

前言: 最近收到的ZIP交互原型,打开查看中文一堆乱码.主要是产品都是高大上啊,用的都是MAC,咱酷毙用的Windows,话说安卓APP,你用MAC搞啥啊.可恨的压缩用的是zip,不是rar之类的.为了咱用Windows开发及测试的屌丝,分享下解决方法.如你高在上,用的MAC,请跳过本文. 目录: 1.问题 2.解决方法 1.问题 现象: a.ZIP文件,360压缩3.1正式版查看.解压中文为乱码. b.ZIP文件,Winrar 3.7压缩查看.解压中文为乱码. 2.解决方法 方法一:安装新版本