java 中如何进行zip包的解压缩呢?
有两种方式:
(1)使用jdk 自带的zip工具
(2)使用apache旗下的commons-compress
我下面要讲解的zip解压缩助手使用的是apache旗下的commons-compress.
工具运行界面如下:
核心代码:
解压:
/*** * 解压zip * * @param zipFile * @param decompressLoc * :解压之后的文件所在目录 * @throws ArchiveException * @throws IOException */ public static boolean deCompressRecursion(String zipFile, File decompressLoc, String charSet) throws ArchiveException, IOException { FileInputStream fin = new FileInputStream(zipFile); ArchiveInputStream archIns = new ArchiveStreamFactory() .createArchiveInputStream(ArchiveStreamFactory.ZIP, fin); ZipArchiveInputStream zipIn = (ZipArchiveInputStream) archIns; boolean isSuccess = deCompressRecursion(zipIn, decompressLoc, charSet); zipIn.close(); return isSuccess; } /*** * 递归解压缩. * * @param zipIn * @param decompressLoc * @return * @throws IOException */ private static boolean deCompressRecursion(ZipArchiveInputStream zipIn, File decompressLoc, String charset) throws IOException { ZipArchiveEntry zipEntry; if (ValueWidget.isNullOrEmpty(charset)) { charset = SystemHWUtil.CHARSET_UTF; } while (!ValueWidget.isNullOrEmpty(zipEntry = zipIn.getNextZipEntry())) { byte[] rawName = zipEntry.getRawName(); String fileName = new String(rawName, charset); // System.out.println(fileName); if (zipEntry.isDirectory()) {// 是目录 File newFolder = new File(decompressLoc, fileName);// 若子目录不存在,则创建之 System.out.println(newFolder.getAbsolutePath()); if (!newFolder.exists()) { newFolder.mkdir(); } // deCompressRecursion(zipIn, decompressLoc,charset); } else {// 是普通文件 File singFile = new File(decompressLoc, fileName); System.out.println(singFile.getAbsolutePath()); if (singFile.exists()) {// 若解压后的文件已经存在,则直接退出 GUIUtil23.warningDialog("File \"" + singFile.getAbsolutePath() + "\" does exist."); return false; } /** * 以下四行代码是后来添加的,为了解决父目录不存在的问题 */ File fatherFolder = singFile.getParentFile(); if (!fatherFolder.exists()) { fatherFolder.mkdirs(); } FileUtils.writeIn2Output(zipIn, new FileOutputStream(singFile), true, false); } } return true; }
压缩:
/*** * 压缩文件. * * @param zipFile * @param folderPaths * @return * @throws ArchiveException * @throws IOException */ public static boolean compressZipRecursion(String zipFile, String folderPaths) throws ArchiveException, IOException { FileOutputStream fou = new FileOutputStream(zipFile); ArchiveOutputStream archOuts = new ArchiveStreamFactory() .createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou); if (archOuts instanceof ZipArchiveOutputStream) { ZipArchiveOutputStream zipOut = (ZipArchiveOutputStream) archOuts; List<ZipArchiveEntry> zipEntrys = getZipFileListRecursion(new File( folderPaths), null); for (int i = 0; i < zipEntrys.size(); i++) { ZipArchiveEntry zipEntry2 = zipEntrys.get(i); zipOut.putArchiveEntry(zipEntry2); File file = new File(folderPaths, zipEntry2.getName()); if (!file.exists()) { return false; } if (!file.isDirectory()) { FileInputStream fin = new FileInputStream(file); // 不要关闭zipOut,关闭之前要执行closeArchiveEntry() FileUtils.writeIn2Output(fin, zipOut, false, true); } } closeZip(zipOut, true); } return true; } /*** * 压缩之后的收尾操作. * * @param zipOut * @throws IOException */ private static void closeZip(ZipArchiveOutputStream zipOut, boolean iscloseArchiveEntry) throws IOException { if (iscloseArchiveEntry) { zipOut.closeArchiveEntry();// it is necessary } zipOut.flush(); zipOut.finish(); zipOut.close(); }
上述代码见类:com.common.util.CompressZipUtil
项目名:zip_mgmt
项目源代码见附件:zip_mgmt.zip
项目使用maven 构建
IDE:eclipse
依赖的jar包:(1)io0007-find_progess-0.0.8-SNAPSHOT.jar
(2)is_chinese
学习笔记见附件java zip压缩.zip
参考:http://m.blog.csdn.net/blog/buyaore_wo/7047343
http://www.cnblogs.com/un4sure/archive/2011/09/27/2193298.html,
http://hw1287789687.iteye.com/blog/1976309
相关推荐
java语言操作解压缩文件。 /** * 数据压缩 * * @param data * @return * @throws Exception */ public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ...
Java工具类ZIP解压缩Java工具类ZIP解压缩Java工具类ZIP解压缩
这是使用java 编写的一个zip解压缩工具,既可以解压缩zip包,也可以把目录打包成为zip压缩包. 源代码下载地址: http://pan.baidu.com/s/1c0EJrlm
java 解压缩zip文件 java 解压缩zip文件 java 解压缩zip文件
java zip文件的压缩与解压缩,支持中文 使用apache的工具包可设置字符编码
JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码
JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...
解决android 自带zip解压缩中文乱码的问题,导入zip.jar即可使用(与系统提供的用法相同),大小仅24k
java zip压缩和解压缩文件,附带ant.jar
java解压缩zip代码与用到的jar包
java 中压缩ZIP格式源码,仅供参考。
关于Java实现文件的zip的解压缩 文本文档 虽然不多
zip解压缩文件文件夹都可以,代码清晰,注释多。非常容易看懂
java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文)....
zip带密码压缩解压缩工具类,支持中文文件名,支持密码
物超所值.亲手测试修改后的java压缩解压缩类直接可以使用的方法
解决java ZIP压缩、解压缩(同时加解密)问题,代码部分
使用java压缩也解压zip文件方法,解决中文乱码问题。使用java自带的压缩解压算法,会出现中文乱码问题。使用apache io的zip包,有效解决该问题。Ant的压缩解压,也是使用该类。