zip文件解压 java
最近在做zip包的解压,遇到了问题。
1.如何成功进行zip包的解压;
2.如何提高zip包解压的速度。
注:速度的提高主要体现在解压时使用的jar包,是java自带的还是apache的。听师哥说java的zip类打开zip文件的目录快,但是解压慢。apache的包解压速度快些,但是遍历zip包条目速度慢。这种说法还带考证,电脑今天卡的紧,只有回头测了。
不过肯定的是,只有apache的包才支持带中文名文件的zip包解压。
1.首先使用java自带的zip解压功能进行了解压,(如果压缩包中有中文名文件不能正常解压)
代码如下:
package com.huawei.action; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; public class Unzip { private static final int BUFFER = 2048; public static void main(String[] args) { String filePath = "C:\\test\\test.zip"; String desPath = filePath.substring(0, filePath.lastIndexOf("\\")) + "\\"; int count = 0; byte[] a = new byte[BUFFER]; File file = new File(filePath); if (!file.exists()) { return; } try { ZipFile zipfile = new ZipFile(file); Enumeration<? extends ZipEntry> enu = zipfile.entries(); while (enu.hasMoreElements()) { ZipEntry entry = enu.nextElement(); //如果zip条目为目录,则直接创建 if (entry.isDirectory()) { new File(desPath + entry.getName()).mkdirs(); continue; } File desFile = new File(desPath + entry.getName()); if (!desFile.exists()) { desFile.createNewFile(); } FileOutputStream fos = new FileOutputStream(desFile); BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER); BufferedInputStream zis = new BufferedInputStream( zipfile.getInputStream(entry)); while ((count = zis.read(a, 0, BUFFER)) != -1) { bos.write(a, 0, count); } bos.flush(); bos.close(); zis.close(); } zipfile.close(); } catch (ZipException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
2.使用org.apache.tools.zip工具类,可实现中文文件名称的解压。
其中
1、使用时把ant.jar放到classpath中,程序中使用import org.apache.tools.zip.*;
2、Apache Ant 下载地址:http://ant.apache.org
3. Ant ZIP API: http://www.jajakarta.org/ant/ant-1.6.1/docs/mix/manual/api/org/apache/tools/zip/
代码基本没变,只是引用的包变为了apache的
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; public class Unzip { private static final int BUFFER = 2048; public static void main(String[] args) { String filePath = "C:\\test\\test.zip"; String desPath = filePath.substring(0, filePath.lastIndexOf("\\")) + "\\"; int count = 0; byte[] a = new byte[BUFFER]; File file = new File(filePath); if (!file.exists()) { return; } try { ZipFile zipfile = new ZipFile(file); Enumeration<? extends ZipEntry> enu = zipfile.getEntries(); while (enu.hasMoreElements()) { ZipEntry entry = enu.nextElement(); // 如果zip条目为目录,则直接创建 if (entry.isDirectory()) { new File(desPath + entry.getName()).mkdirs(); continue; } File desFile = new File(desPath + entry.getName()); if (!desFile.exists()) { desFile.createNewFile(); } FileOutputStream fos = new FileOutputStream(desFile); BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER); BufferedInputStream zis = new BufferedInputStream( zipfile.getInputStream(entry)); while ((count = zis.read(a, 0, BUFFER)) != -1) { bos.write(a, 0, count); } bos.flush(); bos.close(); zis.close(); } zipfile.close(); } catch (IOException e) { e.printStackTrace(); } } }