`
wanghuapeng0000
  • 浏览: 23544 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

ZIP 压缩解压缩

阅读更多
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压缩解压缩

    【标题】:“zip压缩解压缩”这一主题主要涵盖了在计算机编程中如何使用C++语言进行ZIP文件的压缩和解压缩操作。ZIP是一种广泛使用的文件格式,它允许将多个文件打包成一个单一的压缩文件,以节省存储空间和提高传输...

    C++ 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压缩解压缩"是指使用C或C++编程语言来实现对ZIP文件格式的处理。ZIP是一种广泛使用的文件归档格式,它允许将多个文件和目录打包成一个...

    WinCE ZIP 压缩解压缩源代码

    总的来说,这份WinCE ZIP压缩解压缩源代码为开发者提供了一个实用的工具,通过研究和理解源代码,不仅可以掌握ZIP文件处理的基本原理,还可以了解到在有限资源环境下C++编程的一些技巧。同时,这也是一个很好的学习...

    标准zip压缩解压缩DLL库

    标题中的“标准zip压缩解压缩DLL库”指的是一个动态链接库(Dynamic Link Library,简称DLL),它是Windows操作系统中的一种共享库,包含了一系列用于处理ZIP格式压缩和解压缩的函数。DLL库的优势在于可以让多个程序...

    各种zip压缩解压缩源码集合.zip

    本压缩包"各种zip压缩解压缩源码集合.zip"显然包含了一系列与Zip压缩算法相关的源代码,这对于理解其工作原理、进行二次开发或者优化现有压缩库非常有价值。下面,我们将深入探讨Zip压缩算法及相关编程知识。 1. **...

    各种zip压缩解压缩源码集合

    本资源集合,名为“各种zip压缩解压缩源码集合”,是经过三年的积累和实践经验总结,涵盖了多种编程语言和技术,特别是C#、ASP.NET、SQL以及DBA相关的源码实现。这里我们将详细探讨zip压缩和解压缩的核心原理以及...

    demofolder.zip【C++的Zip压缩解压缩】

    【C++的Zip压缩解压缩】是一个在Windows平台上利用C++编程语言实现的工具类,主要用于处理ZIP格式的压缩和解压缩操作。这个工具类基于codeproject网站上分享的源代码,提供了方便的API接口,使得开发者能够在自己的...

    利用Java实现zip压缩解压缩

    【Java实现ZIP压缩解压缩详解】 在Java中,由于其1.1版本开始引入的I/O数据流与网络数据流的统一接口,使得文件的压缩和解压缩变得相对简单。本篇文章将详细介绍如何利用Java的`ZipEntry`、`ZipInputStream`和`...

    ucos移植zlib和zip文件解压缩

    本篇文章将详细介绍如何在UCOS系统中移植ZLIB库以及实现ZIP文件的解压缩。 首先,ZLIB是一个开源的压缩库,它提供了数据的无损压缩和解压缩功能,常用于GIF、PNG等文件格式。移植ZLIB到UCOS涉及到以下几个关键步骤...

    ZIP 压缩 解压缩 源码

    使用ZLIB库 包装的压缩解压缩文件的源码 VS2005 工程创建 /* */ class ZIPWRAP_EXP CZipper { public: CZipper(); virtual ~CZipper(); // simple interface static bool ZipFile(const char* szFilePath...

    delphi中进行zip压缩解压缩

    在Delphi编程环境中,处理ZIP文件的压缩与解压缩任务时,可以借助第三方库VCLZip。VCLZip是一个强大的组件集,它提供了方便的API,使得开发者可以在Delphi应用程序中轻松实现对ZIP文件的操作。下面我们将详细探讨...

    testzip_zip压缩解压缩_

    反过来,解压缩时,会先由`libarchive`或`minizip`读取ZIP文件结构,再调用zlib的解压缩函数。 在提供的压缩包子文件列表中,我们看到只有一个名为"testzip"的文件。这可能是一个测试用例或者示例代码,用于演示...

    zip压缩解压缩代码

    3. **C# ZIP压缩** 在C#中,使用`System.IO.Compression.ZipFile`类可以轻松实现压缩功能。以下是一个简单的示例,展示了如何将目录及其内容压缩为ZIP文件: ```csharp using System.IO; using System.IO....

    c++ zip 压缩 解压缩

    通过以上步骤,你可以在C++中构建一个完整的ZIP压缩和解压缩工具。`ZipUtil`这个类很可能包含了上述提到的所有功能,实现了从文件和目录的压缩到解压缩的完整流程。在实际应用中,你可以根据需求调整和扩展这个工具...

    window平台下c++ 对zip压缩解压缩工程源代码

    4. **readme.txt**: 这个文件提供了详细的使用说明,包括如何配置工程、如何调用压缩解压缩函数,以及如何构建JSON输入等。 在实际使用这套源代码时,你需要先按照readme.txt的指示设置和构建工程。然后,根据你的...

    java zip 压缩 解压缩 附带ant.jar

    在本主题中,我们将深入探讨如何使用Java来对文件进行zip压缩和解压缩,并提及`ant.jar`的作用。 首先,让我们来看一下`JavaZip.java`这个文件。它很可能包含了一个示例程序,演示了如何使用Java API来压缩和解压缩...

    ios zip压缩解压缩

    把文件导入工程,可以调用以下接口,创建ZIP或者解压ZIP文件: -(BOOL) CreateZipFile2:(NSString*) zipFile; -(BOOL) CreateZipFile2:(NSString*) zipFile Password:(NSString*) password; -(BOOL) addFileToZip:...

    qt5插件方式封装7zip压缩解压缩

    //定义接口 class Dll7ZipInterface ... // 压缩 virtual void setProgressCallBack(ProgressCallBack cb) = 0; // 压缩解压回调 过程 virtual void setFileCallBack(FileCallBack cb) = 0; // 压缩解压回调 文件 };

Global site tag (gtag.js) - Google Analytics