本文实例讲述了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 < inputFiles.length; i++) { zip(out, inputFiles[i], base + inputFiles[i].getName(), isDelete); } } else { // 如果是文件 if (base.length() > 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() <= 0)) { throw new Exception("要解压的文件不存在!"); } ZipFile zipFile = new ZipFile(f); String strPath, gbkPath, strtemp; File tempFile = new File(fileSavePath);// 从当前目录开始 strPath = tempFile.getAbsolutePath();// 输出的绝对位置 Enumeration<ZipEntry> 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 < strsubdir.length(); i++) { if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + File.separator + strsubdir.substring(0, i); File subdir = new File(temp); if (!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int len; byte[] buff = new byte[BUFFEREDSIZE]; while ((len = bis.read(buff)) != -1) { bos.write(buff, 0, len); } bos.close(); fos.close(); } } } catch (Exception e) { e.printStackTrace(); throw e; } if (isDelete) { new File(zipFilePath).delete(); } } // public static void main(String[] args) { // ZipUtil cpr = new ZipUtil(); // try { // cpr.zip("C:/Users/Lenovo User/Desktop/test中文.zip", "C:/Users/Lenovo User/Desktop/新建文件夹", false); // cpr.unZip("C:/Users/Lenovo User/Desktop/test中文.zip", "C:/Users/Lenovo User/Desktop/新建文件夹2", false); // } catch (Exception e) { // e.printStackTrace(); // } // // } }
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
本文向大家介绍Android Zip解压缩工具类分享,包括了Android Zip解压缩工具类分享的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android Zip解压缩工具类的具体代码,供大家参考,具体内容如下 添加权限 在具体的场景中测试一下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍C#实现的文件压缩和解压缩类,包括了C#实现的文件压缩和解压缩类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现的文件压缩和解压缩类。分享给大家供大家参考。具体分析如下: 这个C#代码包含了几个类,封装了文件压缩和解压缩常用的方法,包括直接通过代码进行压缩,也有调用winrar对文件进行压缩的 希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍Python压缩解压缩zip文件及破解zip文件密码的方法,包括了Python压缩解压缩zip文件及破解zip文件密码的方法的使用技巧和注意事项,需要的朋友参考一下 python 的 zipfile 提供了非常便捷的方法来压缩和解压 zip 文件。 例如,在py脚本所在目录中,有如下文件: 将 readability 目录中的文件压缩到脚本所在目录的 readability.zip
本文向大家介绍java图片压缩工具类,包括了java图片压缩工具类的使用技巧和注意事项,需要的朋友参考一下 直接上java图片压缩code: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Java实现文件压缩与解压的示例[zip格式,gzip格式],包括了Java实现文件压缩与解压的示例[zip格式,gzip格式]的使用技巧和注意事项,需要的朋友参考一下 Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例。 zip扮演着归档和压缩两个角色;gzip并不将文件归档,仅
问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭