package com.imooc.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; /** * * @version 1.0 * @since 2015-9-14 * 文件解压缩工具类 * */ public final class ZipUtil { /** * 缓冲大小 */ private static int BUFFERSIZE = 2 << 10; /** * 压缩 * @param paths * @param fileName */ public static void zip(String[] paths, String fileName) { ZipOutputStream zos = null; try { zos = new ZipOutputStream(new FileOutputStream(fileName)); for(String filePath : paths) { //递归压缩文件 File file = new File(filePath); String relativePath = file.getName(); if(file.isDirectory()) { relativePath += File.separator; } zipFile(file, relativePath, zos); } } catch (IOException e) { e.printStackTrace(); } finally { try { if(zos != null) { zos.close(); } } catch (IOException e) { e.printStackTrace(); } } } public static void zipFile(File file, String relativePath, ZipOutputStream zos) { InputStream is = null; try { if(!file.isDirectory()) { ZipEntry zp = new ZipEntry(relativePath); zos.putNextEntry(zp); is = new FileInputStream(file); byte[] buffer = new byte[BUFFERSIZE]; int length = 0; while ((length = is.read(buffer)) >= 0) { zos.write(buffer, 0, length); } zos.flush(); zos.closeEntry(); } else { for(File f: file.listFiles()) { zipFile(f, relativePath + f.getName() + File.separator, zos); } } } catch (IOException e) { e.printStackTrace(); } finally { try { if(is != null) { is.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 解压缩 * @param fileName * @param path */ public static void unzip(String fileName, String path) { FileOutputStream fos = null; InputStream is = null; try { ZipFile zf = new ZipFile(new File(fileName)); Enumeration en = zf.entries(); while (en.hasMoreElements()) { ZipEntry zn = (ZipEntry) en.nextElement(); if (!zn.isDirectory()) { is = zf.getInputStream(zn); File f = new File(path + zn.getName()); File file = f.getParentFile(); file.mkdirs(); fos = new FileOutputStream(path + zn.getName()); int len = 0; byte bufer[] = new byte[BUFFERSIZE]; while (-1 != (len = is.read(bufer))) { fos.write(bufer, 0, len); } fos.close(); } } } catch (ZipException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(null != is) { is.close(); } if(null != fos) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * @param args */ public static void main(String[] args) { zip(new String[] {"D:/tmp/20150418/logs/file/2015-08-28/debug-log.log","D:/tmp/20150418/logs/file/2015-08-28/error-log.log"}, "D:/tmp/20150418/logs/file/2015-08-28/test.zip"); unzip("D:/tmp/20150418/logs/file/2015-08-28/test.zip", "D:/test/"); } }
相关推荐
总之,`ZipUtil`文件压缩工具类通过结合`ZipEntry`和`ZipOutputStream`,提供了一种高效且健壮的解决方案,尤其适合处理包含中文字符的文件和目录,确保在压缩和解压过程中不会出现乱码问题。这对于需要在Java应用...
"Java实现的zip压缩及解压缩工具类示例" Java实现的zip压缩及解压缩工具类示例主要介绍了Java实现的zip压缩及解压缩工具类,结合实例形式分析了java对文件的进行zip压缩及解压缩的具体操作技巧。下面将对该工具类的...
10. **标签“工具”**: 可能意味着`ZIPUtil`不仅仅是一个简单的功能,它可能是一个更复杂的工具,具有更多的功能,比如解压缩,支持多种压缩格式等。 11. **文件“ant.jar”**: 这是一个可能的依赖库,可能包含了...
本文将深入探讨如何利用ant.jar中的API创建一个自定义的文件压缩工具类,实现对文件和目录的zip与unzip操作,并关注编码设置的重要性。 首先,我们需要导入ant.jar库到项目中。在Java中,我们可以通过Maven或Gradle...
当需要向已存在的ZIP文件追加文件时,首先使用`ZipUtil`解压缩ZIP文件到一个临时目录,然后在该目录中添加新的文件,最后重新压缩整个目录并覆盖原有的ZIP文件。以下是大致的步骤: - 使用`ZipUtil`的`unzip`方法...
Java提供了强大的压缩工具类,如`java.util.zip`包下的`ZipFile`、`ZipInputStream`、`ZipOutputStream`等类,可以方便地进行ZIP格式的压缩和解压缩操作。 - **ZipOutputStream**:用于创建ZIP格式的压缩文件。 - *...
在C++编程中,处理文件压缩和解压缩是一项...`ZipUtil`这个类很可能包含了上述提到的所有功能,实现了从文件和目录的压缩到解压缩的完整流程。在实际应用中,你可以根据需求调整和扩展这个工具,以满足特定项目的需求。
5. **解压缩ZIP**:解压ZIP文件涉及以下操作: - 创建`ZipInputStream`,读取ZIP文件。 - 使用`getNextEntry()`遍历ZIP文件中的每个条目。 - 对于每个条目,创建一个`File`对象,表示解压后的文件或目录。 - ...
解密时,先使用`Base64Util.decodeBase64StringToFile()`将BASE64字符串解码回ZIP文件,再使用相应的工具解压缩。 在实际开发中,这些工具类可以封装成一个完整的库,提供给其他部分代码使用。例如,你可以创建一个...
本项目是作者使用Eclipse开发的一个简单但功能齐全的ZIP压缩与解压缩工具,它包含了文件分割、进度条显示以及图形用户界面(GUI)。 【描述】:该项目的核心在于理解ZIP文件格式规范和Java的I/O流以及压缩算法。...
首先,`ZipUtil`类包含两个主要方法:`zip`用于压缩文件或目录,`unzip`用于解压缩ZIP文件。这两个方法都是静态的,可以直接通过类名调用,无需创建对象实例。 `zip`方法接收两个参数:`sourceFilePath`表示需要...
2. **ZipUtil.cs**:这个文件名暗示可能是一个自定义的压缩工具类,包含了一系列用于压缩和解压缩的方法。在C#中,通常会创建这样的辅助类,封装压缩操作,以提高代码复用性。 3. **FileUtil.cs**:同样,FileUtil...
接下来,我们编写一个名为`ZipUtil`的工具类,它包含了压缩和解压缩的功能: ```java import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.io.TeeOutputStream; import ...
标签中的"源码"和"工具"可能指的是通过阅读和分析Java标准库中的`java.util.zip`源代码,以及利用这些API创建自己的工具类或实用程序,以适应特定的项目需求。 通过以上知识点,开发者可以有效地在Java环境中处理....
如果你的项目不使用任何构建工具,你可以手动下载jar文件并将其添加到项目的类路径中。 ```xml <!-- Maven --> <groupId>org.apache.commons <artifactId>commons-compress <version>1.21 ``` 或 ```groovy ...
解压缩ZIP文件则涉及`ZipInputStream`的使用。以下是一个基本的解压示例: ```java import java.io.*; import java.util.zip.*; public class UnzipUtil { public static void unzipFile(String zipFileName, ...