Java实现的zip压缩及解压缩工具类示例

这篇文章主要介绍了Java实现的zip压缩及解压缩工具类,结合实例形式分析了java对文件的进行zip压缩及解压缩的具体操作技巧,需要的朋友可以参考下

本文实例讲述了Java实现的zip压缩及解压缩工具类。分享给大家供大家参考,具体如下:

import java.io.BufferedInputStream; import java.io.bufferedoutputstream; 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.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; public class ZipUtil { private static final int BUFFEREDSIZE = 1024; /** * 压缩文件 * * @param zipFileName * 保存的压缩包文件路径 * @param filePath * 需要压缩的文件夹或者文件路径 * @param isDelete * 是否删除文件 * @throws Exception */ public void zip(String zipFileName, String filePath, boolean isDelete) throws Exception { zip(zipFileName, new File(filePath), isDelete); } /** * 压缩文件 * * @param zipFileName * 保存的压缩包文件路径 * @param inputFile * 需要压缩的文件夹或者文件 * @param isDelete * 是否删除文件 * @throws Exception */ public void zip(String zipFileName, File inputFile, boolean isDelete) throws Exception { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); if (!inputFile.exists()) { throw new FileNotFoundException("在指定路径未找到需要压缩的文件!"); } zip(out, inputFile, "", isDelete); out.close(); } /** * 递归压缩方法 * * @param out * 压缩包输出流 * @param f * 需要压缩的文件 * @param base * 压缩的路径 * @param isDelete * 是否删除文件 * @throws Exception */ private void zip(ZipOutputStream out, File inputFile, String base, boolean isDelete) throws Exception { if (inputFile.isDirectory()) { // 如果是目录 File[] inputFiles = inputFile.listFiles(); out.putNextEntry(new ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i 0) { out.putNextEntry(new ZipEntry(base)); } else { out.putNextEntry(new ZipEntry(inputFile.getName())); } FileInputStream in = new FileInputStream(inputFile); try { int len; byte[] buff = new byte[BUFFEREDSIZE]; while ((len = in.read(buff)) != -1) { out.write(buff, 0, len); } } catch (IOException e) { throw e; } finally { in.close(); } } if (isDelete) { inputFile.delete(); } } /** * 解压缩 * * @param zipFilePath * 压缩包路径 * @param fileSavePath * 解压路径 * @param isDelete * 是否删除文件 * @throws Exception */ public void unZip(String zipFilePath, String fileSavePath, boolean isDelete) throws Exception { try { (new File(fileSavePath)).mkdirs(); File f = new File(zipFilePath); if ((!f.exists()) && (f.length() e = zipFile.getEntries(); while (e.hasMoreElements()) { org.apache.tools.zip.ZipEntry zipEnt = e.nextElement(); gbkPath = zipEnt.getName(); if (zipEnt.isDirectory()) { strtemp = strPath + File.separator + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { // 读写文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath = zipEnt.getName(); strtemp = strPath + File.separator + gbkPath; // 建目录 String strsubdir = gbkPath; for (int i = 0; i

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...