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
本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...
解压缩ZIP文件则可以使用`org.apache.commons.compress.archivers.zip.ZipArchiveInputStream`类。同样,我们需要设置正确的编码来正确读取中文文件名: ```java import org.apache.commons.compress.archivers.zip...
在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。...通过上述知识点,开发者能够有效地在Java环境中进行ZIP文件的压缩与解压缩操作,满足实际项目需求。
首先,让我们来看一下`JavaZip.java`这个文件。它很可能包含了一个示例程序,演示了如何使用Java API来压缩和解压缩文件。在Java中,我们通常使用`ZipOutputStream`来创建ZIP文件,`ZipInputStream`来读取和解压缩...
JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...
在Java编程语言中,解压缩ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包和部署等场景下。本文将深入探讨如何使用Java API来解压缩ZIP文件,包括基本概念、核心类库以及具体实现步骤。 ZIP文件是一种...
接下来,我们讨论如何解压缩ZIP文件。解压缩通常包括以下步骤: 1. **创建`ZipInputStream`**:同样,你需要创建一个`ZipInputStream`,它从ZIP文件的输入流读取。 ```java FileInputStream fis = new ...
在本篇中,我们将深入探讨如何使用Java API来实现ZIP文件的解压缩,以及可能需要用到的第三方库。 首先,Java标准库(Java Standard Library)自身提供了对ZIP文件的支持。在`java.util.zip`包中,有两个关键类用于...
首先,我们需要了解Java中的`java.util.zip`包,这个包提供了处理压缩文件的基本工具。在ZIP格式的压缩包处理中,我们主要会用到`ZipInputStream`和`ZipEntry`这两个类。`ZipInputStream`是用于读取ZIP文件的输入流...
### Java 实现 ZIP 文件压缩与解压缩 #### 知识点概述 在现代软件开发过程中,数据压缩是一项非常重要的技术,特别是在处理大量数据时。Java 作为一种广泛应用的编程语言,提供了丰富的 API 来支持文件的压缩与解...
本文将深入探讨如何使用`zip4j`库来实现带密码的ZIP文件压缩与解压缩,该库支持中文文件名,并且具有良好的密码保护功能。 `zip4j`是一个强大的Java库,它提供了丰富的API来处理ZIP文件,包括添加、删除、提取文件...
在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...
对于解压缩,同样需要处理编码问题。可以使用`ZipEntry`的`setName()`方法来设定文件名的编码: ```java ZipInputStream zis = new ZipInputStream(new FileInputStream("input.zip")); ZipEntry entry; while (...
zip解压缩文件文件夹都可以,代码清晰,注释多。非常容易看懂
JDK11 Windows Zip解压缩版是开发者在Windows环境下快速启动Java开发的便捷方式。其带来的新特性和改进对于提升开发效率和代码质量都有显著帮助。通过简单的解压和环境变量配置,开发者就能轻松地在Windows系统上...