package com.yonge.zip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.apache.commons.io.IOUtils;
/**
* 压缩目标文件为zip文件
* @author wb-gaoy
* @version $Id: CompressByZip.java,v 0.1 2013-1-8 上午10:18:16 wb-gaoy Exp $
*/
public class ZipUtil {
public static void zip(File srcFile, File targetFile) throws IOException {
ZipOutputStream zipOutputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(targetFile);
zipOutputStream = new ZipOutputStream(fileOutputStream);
zip(zipOutputStream, srcFile, "");
} finally {
if (zipOutputStream != null) {
zipOutputStream.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
}
public static void zip(ZipOutputStream zipOutputStream, File srcFile, String baseURL)
throws IOException {
baseURL = baseURL == null || baseURL.length() == 0 ? srcFile.getName() : baseURL
+ "/"
+ srcFile
.getName();
if (srcFile.isDirectory()) {
File[] files = srcFile.listFiles();
if (files != null && files.length > 0) {
for (File f : files) {
zip(zipOutputStream, f, baseURL);
}
} else {
zipOutputStream.putNextEntry(new ZipEntry(baseURL + "/"));
}
} else {
zipOutputStream.putNextEntry(new ZipEntry(baseURL));
FileInputStream fileInputStream = null;
try {
//读数据
fileInputStream = new FileInputStream(srcFile);
byte[] bytes = new byte[1024];
int length = -1;
while ((length = fileInputStream.read(bytes)) != -1) {
zipOutputStream.write(bytes, 0, length);
}
} finally {
if (fileInputStream != null) {
fileInputStream.close();
}
}
}
}
public static void unzip(File srcFile, File targetFile) throws IOException {
FileInputStream fileInputStream = null;
ZipInputStream zipInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(srcFile);
zipInputStream = new ZipInputStream(fileInputStream);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
ZipEntry entry = zipInputStream.getNextEntry();
File tempFile;
while (entry != null) {
tempFile = new File(targetFile, entry.getName());
if (entry.isDirectory()) {
tempFile.mkdir();
} else {
tempFile.getParentFile().mkdirs();
fileOutputStream = new FileOutputStream(tempFile);
IOUtils.copy(zipInputStream, fileOutputStream);
}
entry = zipInputStream.getNextEntry();
}
} finally {
if (zipInputStream != null) {
zipInputStream.close();
}
if (fileInputStream != null) {
fileInputStream.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
}
public static void main(String[] args) {
File file = new File("C:\\ecmng\\site\\tmp\\test");
try {
//zip(file, new File("demo.zip"));
unzip(new File("demo.zip"), file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
Zip格式还允许包含多个文件和目录,每个都可独立压缩,使得在压缩大型文件集时更为高效。 进行Zip压缩时,通常会使用专门的工具或编程库。例如,在Java中,我们可以利用java.util.zip包中的ZipOutputStream类来实现...
本篇文章将详细介绍如何在`C++`中利用`Zlib`库实现对`zip`文件的压缩和解压,并特别关注其支持的递归压缩特性,以及如何将其与自动更新功能结合使用。 首先,我们需要理解`Zlib`库的基本原理。`Zlib`库基于`DEFLATE...
总之,C语言实现ZIP压缩解压涉及文件操作、数据压缩算法和ZIP文件格式的理解。通过学习和应用相关库,开发者可以创建自己的ZIP工具,满足特定的需求。这个过程既锻炼了C语言编程技能,也加深了对文件压缩技术的理解...
总之,通过利用合适的库和编程技巧,我们可以在ASP.NET中实现RAR和ZIP文件的在线压缩和解压缩功能,为用户提供高效、稳定的服务。同时,持续关注和学习新的库和技术,能够帮助我们提升解决方案的质量和性能。
标题 "pb用7z压缩和解压文件pb12.5(源码含Demo).zip" 提供的信息表明,这是一个关于使用7z工具在PowerBuilder(简称PB)环境中进行文件压缩和解压缩的示例。7z是一种高效、开源的压缩格式,提供了比常见的ZIP和RAR...
而zip.php则可能负责文件的压缩操作,它需要遍历要打包的文件和目录,创建新的ZIP文件,并将文件添加到其中。这两个文件可能都包含了错误处理和日志记录的代码,以便在出现问题时能够追踪和调试。 在实现这些功能时...
CZip和CUnzip是两个非常实用的类,它们分别用于文件的压缩和解压缩操作,是ZLib库的一个MFC封装,使得在MFC项目中使用起来更加方便。本文将详细介绍如何使用CZip和CUnzip类来处理文件的压缩与解压缩任务。 首先,...
ZIP文件可以将多个文件和目录组合到一个单一的档案文件中,并且可以进行压缩以节省存储空间。C++库提供了处理ZIP文件的API,使得开发人员能够轻松地对这些文件进行操作。 描述中提到,只需包含头文件即可进行压缩...
`ZipOutputStream`用于创建ZIP文件,而`ZipInputStream`则用于读取和解压ZIP文件。为了添加密码保护,我们需要在创建`ZipOutputStream`时设置一个密码。 1. **密码保护**:在压缩过程中,可以使用`ZipEntry`对象来...
### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....
VB程序实例-利用WinRar压缩和解压文件.zip
在IT行业中,压缩和解压文件是常见的操作,特别是在数据传输、存储优化和软件分发等领域。本篇文章将深入探讨如何利用开源的zip代码来实现文件的压缩与解压缩功能。 首先,我们要知道ZIP是一种广泛使用的文件格式,...
本篇将重点介绍如何利用MFC进行文件的压缩和解压操作,以及相关的知识点。 首先,`unzip.cpp`和`zip.cpp`是实现压缩和解压功能的源代码文件,它们可能包含了对压缩库的具体实现,如ZIP或RAR格式的处理。`unzip.h`和...
标题中提到的"压缩和解压zip、rar、7z等库"正是针对这一需求的解决方案。以下将详细介绍这些库以及如何在C++中使用它们。 1. **ZIP库**: ZIP是最常见的文件压缩格式之一。在C++中,可以使用`libzip`库进行操作。`...
本文将深入探讨如何使用Java实现ZIP文件的压缩与解压,重点讲解核心API,如`java.util.zip`包中的`ZipOutputStream`和`ZipInputStream`。 首先,我们来了解一下ZIP文件格式。ZIP是一种用于存储多个文件到一个单一...
C#利用SharpZipLib进行压缩和解压 C#中的压缩和解压是非常常见的操作, SharpZipLib是一个流行的压缩库,它提供了压缩和解压的功能。在本文中,我们将使用SharpZipLib库来实现文件的压缩和解压。 SharpZipLib简介...
2. 处理ZIP文件格式:理解ZIP文件的内部结构,包括中央目录记录、本地文件头和数据区。这些部分分别包含了文件名、压缩方法、压缩时间等信息,以及压缩数据的实际位置。 3. 解析ZIP文件:在UCOS应用中,通过UNZIP库...
总之,Delphi的`System.Zip`单元为开发者提供了强大的ZIP文件操作能力,无论是创建新的ZIP文件、添加文件还是解压缩文件都变得轻而易举。同时,通过COM接口,我们可以让不同版本的Delphi之间共享这些功能,大大提升...
在Java编程语言中,处理ZIP压缩文件是一项常见的任务,它涉及到文件和目录的打包与解压。本篇文章将深入探讨如何使用Java实现ZIP文件的压缩和解压缩操作,以及涉及的相关知识点。 首先,理解ZIP文件格式是基础。ZIP...
通常,源码会展示如何处理异常、优化性能以及如何处理不同类型的文件和目录。 ### 5. 工具选择 选择合适的工具取决于项目需求。对于简单的操作,Java自带的API可能已经足够。如果需要更复杂的功能,如支持更多压缩...