import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipInputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* 压缩包操作类(压缩,解压)
* @author whp
*
*/
public class Zip {
private int bufferSize;
private byte[] bufferByte;
public Zip(){
this(512); // 默认缓冲值
}
public Zip(int bufferSize){ // 手工设置缓冲值
this.bufferSize=bufferSize;
this.bufferByte=new byte[bufferSize];
}
/**
* 压缩文件(主方法可暴露接口)
* @param filePath 文件夹名
* @throws IOException
*/
public void inZip(String filePath) {
File file=null;
String zipPath="";
ZipOutputStream zipS=null;
try{
file=new File(filePath);
if(!file.exists()){ // 判断文件是否存在
System.out.println(file.getName()+"文件不存在!");
return;
}
zipPath=file.getAbsolutePath()+".zip"; // 压缩后的压缩包名字
zipS=new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipPath))); // 此地方要加绝对路径
this.handleDir(file, zipS,"");
zipS.close(); // 关闭流
System.out.println(file.getName()+"压缩成功");
}catch(IOException e1){
System.out.println("读文件错误");
e1.printStackTrace();
}
}
/**
* 解压缩文件
* @param filePath 压缩文件
*/
public void UnZip(String filePath){
ZipInputStream inStream=null;
ZipEntry entry;
File file=new File(filePath);
if(!file.exists()){ // 判断文件是否存在
System.out.println(file.getName()+"文件不存在!");
return;
}
try {
inStream=new ZipInputStream(new BufferedInputStream(new FileInputStream(filePath)));
while((entry=(ZipEntry) inStream.getNextEntry())!=null){
String name=entry.getName();
File file1=new File(file.getParent()+name); // file.getParent() 输出目录
if(entry.isDirectory()){ // 是目录
file1.mkdir();
}else{
File parent=file1.getParentFile(); // 判断文件父目录是否存在
if(!parent.exists()){
parent.mkdirs();
}
FileOutputStream outStream=new FileOutputStream(file1);
int bufferSize;
while((bufferSize=inStream.read(this.bufferByte))>0){ // 缓冲流
outStream.write(bufferSize);
}
outStream.flush();
outStream.close();
}
inStream.closeEntry();
System.out.println(file.getName()+"解压成功");
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 压缩文件的方法
* @param file 压缩文件
* @param zipS 压缩包
* @param path ZIpEntry 的实体路径
* @throws IOException
*/
private void handleDir(File file,ZipOutputStream zipS,String path) throws IOException {
if(file.isDirectory()){ // 文件夹
String s=path.equals("")?file.getName():path;
File[] files=file.listFiles();
if(files.length==0){ // 空目录
ZipEntry entry=new ZipEntry(path+"/");
zipS.putNextEntry(entry);
zipS.closeEntry();
}
for(File filename:files){
String rename=s+"/"+filename.getName();
this.handleDir(filename, zipS,rename);
}
}else{ // 文件
FileInputStream fileStream=new FileInputStream(file);
ZipEntry zip=new ZipEntry(path); // 构造实体
zipS.putNextEntry(zip);
int bufferSize;
while((bufferSize=fileStream.read(this.bufferByte))>0){ // 读字节流缓冲
zipS.write(bufferSize);
}
zipS.flush();
zipS.closeEntry();
}
}
public static void main(String[] args) throws IOException {
Zip zip=new Zip(512);
long begin=System.currentTimeMillis();
zip.inZip("F://11");
//zip.UnZip("F://11.zip");
long end=System.currentTimeMillis();
System.out.println("time="+(end-begin)); // 执行时间
}
}
分享到:
相关推荐
【标题】:“zip压缩解压缩”这一主题主要涵盖了在计算机编程中如何使用C++语言进行ZIP文件的压缩和解压缩操作。ZIP是一种广泛使用的文件格式,它允许将多个文件打包成一个单一的压缩文件,以节省存储空间和提高传输...
C++ zip压缩解压缩源代码 压缩时调用 #include "zip.h" HZIP hz = CreateZip("c:\\simple1.zip",0); ZipAdd(hz,"znsimple.bmp", "c:\\simple.bmp"); ZipAdd(hz,"znsimple.txt", "c:\\simple.txt"); ...
本话题主要围绕"基于C/C++的zip压缩解压缩"进行深入探讨。 标题中的"C/C++ zip压缩解压缩"是指使用C或C++编程语言来实现对ZIP文件格式的处理。ZIP是一种广泛使用的文件归档格式,它允许将多个文件和目录打包成一个...
总的来说,这份WinCE ZIP压缩解压缩源代码为开发者提供了一个实用的工具,通过研究和理解源代码,不仅可以掌握ZIP文件处理的基本原理,还可以了解到在有限资源环境下C++编程的一些技巧。同时,这也是一个很好的学习...
标题中的“标准zip压缩解压缩DLL库”指的是一个动态链接库(Dynamic Link Library,简称DLL),它是Windows操作系统中的一种共享库,包含了一系列用于处理ZIP格式压缩和解压缩的函数。DLL库的优势在于可以让多个程序...
本压缩包"各种zip压缩解压缩源码集合.zip"显然包含了一系列与Zip压缩算法相关的源代码,这对于理解其工作原理、进行二次开发或者优化现有压缩库非常有价值。下面,我们将深入探讨Zip压缩算法及相关编程知识。 1. **...
本资源集合,名为“各种zip压缩解压缩源码集合”,是经过三年的积累和实践经验总结,涵盖了多种编程语言和技术,特别是C#、ASP.NET、SQL以及DBA相关的源码实现。这里我们将详细探讨zip压缩和解压缩的核心原理以及...
【C++的Zip压缩解压缩】是一个在Windows平台上利用C++编程语言实现的工具类,主要用于处理ZIP格式的压缩和解压缩操作。这个工具类基于codeproject网站上分享的源代码,提供了方便的API接口,使得开发者能够在自己的...
【Java实现ZIP压缩解压缩详解】 在Java中,由于其1.1版本开始引入的I/O数据流与网络数据流的统一接口,使得文件的压缩和解压缩变得相对简单。本篇文章将详细介绍如何利用Java的`ZipEntry`、`ZipInputStream`和`...
本篇文章将详细介绍如何在UCOS系统中移植ZLIB库以及实现ZIP文件的解压缩。 首先,ZLIB是一个开源的压缩库,它提供了数据的无损压缩和解压缩功能,常用于GIF、PNG等文件格式。移植ZLIB到UCOS涉及到以下几个关键步骤...
使用ZLIB库 包装的压缩解压缩文件的源码 VS2005 工程创建 /* */ class ZIPWRAP_EXP CZipper { public: CZipper(); virtual ~CZipper(); // simple interface static bool ZipFile(const char* szFilePath...
在Delphi编程环境中,处理ZIP文件的压缩与解压缩任务时,可以借助第三方库VCLZip。VCLZip是一个强大的组件集,它提供了方便的API,使得开发者可以在Delphi应用程序中轻松实现对ZIP文件的操作。下面我们将详细探讨...
反过来,解压缩时,会先由`libarchive`或`minizip`读取ZIP文件结构,再调用zlib的解压缩函数。 在提供的压缩包子文件列表中,我们看到只有一个名为"testzip"的文件。这可能是一个测试用例或者示例代码,用于演示...
3. **C# ZIP压缩** 在C#中,使用`System.IO.Compression.ZipFile`类可以轻松实现压缩功能。以下是一个简单的示例,展示了如何将目录及其内容压缩为ZIP文件: ```csharp using System.IO; using System.IO....
4. **readme.txt**: 这个文件提供了详细的使用说明,包括如何配置工程、如何调用压缩解压缩函数,以及如何构建JSON输入等。 在实际使用这套源代码时,你需要先按照readme.txt的指示设置和构建工程。然后,根据你的...
通过以上步骤,你可以在C++中构建一个完整的ZIP压缩和解压缩工具。`ZipUtil`这个类很可能包含了上述提到的所有功能,实现了从文件和目录的压缩到解压缩的完整流程。在实际应用中,你可以根据需求调整和扩展这个工具...
在本主题中,我们将深入探讨如何使用Java来对文件进行zip压缩和解压缩,并提及`ant.jar`的作用。 首先,让我们来看一下`JavaZip.java`这个文件。它很可能包含了一个示例程序,演示了如何使用Java API来压缩和解压缩...
把文件导入工程,可以调用以下接口,创建ZIP或者解压ZIP文件: -(BOOL) CreateZipFile2:(NSString*) zipFile; -(BOOL) CreateZipFile2:(NSString*) zipFile Password:(NSString*) password; -(BOOL) addFileToZip:...
//定义接口 class Dll7ZipInterface ... // 压缩 virtual void setProgressCallBack(ProgressCallBack cb) = 0; // 压缩解压回调 过程 virtual void setFileCallBack(FileCallBack cb) = 0; // 压缩解压回调 文件 };