`

实现了ZIP【压缩】【解压】功能

阅读更多

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。

需在代码中自定义源输入路径和目标输出路径。

package com.uaes.util;

import java.io.*;
import java.util.zip.*;

/**
 * @description 实现了ZIP【压缩】【解压】功能:大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
 * @author King_wangyao
 * @date 2011-11-28
 * @version 1.0.0
 * 
 */
public class ZIPUtil {
	private static int k = 1; // 定义递归次数变量

	/**
	 * 指定ZIP压缩(compression)
	 * 
	 * @param zipFileName 输入完整的压缩包路径名称
	 * @param inputFile 输入将要压缩的目录
	 */
	private static void compression(String zipFileName, File inputFile) throws Exception {
		long startTime = System.currentTimeMillis();
		System.out.println("压缩中...");
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
		BufferedOutputStream bo = new BufferedOutputStream(out);
		zip(out, inputFile, "/" + inputFile.getName(), bo);
		bo.close();
		out.close(); // 输出流关闭
		System.out.println("压缩完成");

		long endTime = System.currentTimeMillis();
		System.out.println("压缩耗费时间: " + (endTime - startTime) + " ms");
	}

	private static void zip(ZipOutputStream out, File f, String base, BufferedOutputStream bo) throws Exception { // 方法重载
		if (f.isDirectory()) {
			File[] fl = f.listFiles();
			for (int i = 0; i < fl.length; i++) {
				zip(out, fl[i], base + "/" + fl[i].getName(), bo); // 递归遍历子文件夹
			}
			System.out.println("第" + k + "次递归");
			k++;
		} else {
			out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base
			System.out.println(base);
			FileInputStream in = new FileInputStream(f);
			BufferedInputStream bi = new BufferedInputStream(in);
			int b;
			while ((b = bi.read()) != -1) {
				bo.write(b); // 将字节流写入当前zip目录
			}
			bi.close();
			in.close(); // 输入流关闭
		}
	}

	/**
	 * 指定ZIP解压(decompression)
	 * 
	 * @param target 输入源zip路径
	 * @param parent 输出解压目录)
	 */
	public static void decompression(String target, String parent) {
		long startTime = System.currentTimeMillis();
		System.out.println("压缩中...");
		try {
			ZipInputStream Zin = new ZipInputStream(new FileInputStream(target));// 输入源zip路径
			BufferedInputStream Bin = new BufferedInputStream(Zin);
			File Fout = null;
			ZipEntry entry;
			try {
				while ((entry = Zin.getNextEntry()) != null && !entry.isDirectory()) {
					Fout = new File(parent, entry.getName());
					if (!Fout.exists()) {
						(new File(Fout.getParent())).mkdirs();
					}
					FileOutputStream out = new FileOutputStream(Fout);
					BufferedOutputStream Bout = new BufferedOutputStream(out);
					int b;
					while ((b = Bin.read()) != -1) {
						Bout.write(b);
					}
					Bout.close();
					out.close();
					System.out.println(Fout + "解压成功");
				}
				Bin.close();
				Zin.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		long endTime = System.currentTimeMillis();
		System.out.println("解压耗费时间: " + (endTime - startTime) + " ms");
	}

	/**
	 * 测试...
	 * @param args
	 */
	public static void main(String[] args) {
		// 自定义的zip输出路径
		String target = "C:\\TEMP\\Compression.zip";
		// 自定义的源输入路径,即要压缩的文件或文件夹
		String path = "C:\\TEMP\\student.png";
		// 自定义的解压目录
		String decompressionPath = "C:\\TEMP\\decompression";
		try {
			// 压缩测试
			compression(target, new File(path));
			// 解压测试
			decompression(target, decompressionPath);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

程序控制台输入结果,如下图:



 

压缩、解压结果,如下图:


  • 大小: 28.3 KB
  • 大小: 63.7 KB
分享到:
评论

相关推荐

    [原]使用Ant实现zip压缩解压功能

    而`使用Ant实现zip压缩解压功能`这个文件名可能是相关的文档或说明,包含了更详细的步骤和解释。 总的来说,Apache Ant作为一个强大的构建工具,其ZIP操作功能可以帮助开发者轻松地管理项目文件,提高工作效率。...

    C语言实现Zip压缩解压.rar

    总之,C语言实现ZIP压缩解压涉及文件操作、数据压缩算法和ZIP文件格式的理解。通过学习和应用相关库,开发者可以创建自己的ZIP工具,满足特定的需求。这个过程既锻炼了C语言编程技能,也加深了对文件压缩技术的理解...

    C++ Zlib库实现zip文件压缩解压(支持递归压缩)

    本篇文章将详细介绍如何在`C++`中利用`Zlib`库实现对`zip`文件的压缩和解压,并特别关注其支持的递归压缩特性,以及如何将其与自动更新功能结合使用。 首先,我们需要理解`Zlib`库的基本原理。`Zlib`库基于`DEFLATE...

    C#实现Zip压缩解压

    你可以打开`Demos.sln`,使用Visual Studio或其他支持.NET的IDE来查看和运行代码,以更深入地学习C#中ZIP压缩解压的实现细节。 总的来说,C#为开发者提供了强大且易于使用的工具,用于处理ZIP文件的压缩和解压。...

    zip文件压缩解压源码 (c++)

    总结来说,`zip文件压缩解压源码(C++)`涉及的关键技术包括:理解zip文件格式,使用C++进行文件操作,选择和应用压缩算法,以及错误处理。通过分析和理解`XUnzip.cpp`和`XZip.cpp`,我们可以学习如何在C++环境中...

    C++实现ZIP文件解压

    在本文中,我们将深入探讨如何使用C++语言来实现ZIP文件的解压缩功能,这是一个纯C++的解决方案,不依赖于任何第三方库。这个方法在Visual C++ 6.0环境下开发并测试通过,但请注意,它可能在更新的开发环境中未经...

    ZIP压缩和解压类

    在IT行业中,文件压缩是一种常见...总结,ZIP压缩和解压是IT领域中常用的数据处理技术,理解其原理和实现方法对于日常开发工作非常重要。封装自己的ZIP处理接口可以提高代码复用性和易用性,使文件压缩和解压更加便捷。

    VB6.0调用 DLL版ZIP压缩文件夹目录和解压ZIP文件

    VB6.0调用 DLL版ZIP压缩文件夹目录和解压ZIP文件,网上很多源码不好用,所以就自己做了一个。原始代码是VC++的用VS2019编译了一个,DLL封装了下。调用很简单 '调用方法如下: 'CreateZipFileA "C:\123", "C:\123.zip...

    不错的ZIP压缩解压组件

    总的来说,这个ZIP压缩解压组件提供了一套完整的解决方案,不仅涵盖了基本的压缩和解压功能,还考虑到了安全性以及与Delphi开发环境的良好集成。对于任何需要处理ZIP文件的Delphi开发者来说,它都是一款非常实用的...

    vbs压缩和解压zip,vbs压缩zip,vbs解压zip

    Visual Basic Script(VBS)作为Windows环境中的一种常用脚本语言,支持多种文件操作功能,包括ZIP文件的压缩和解压缩。 #### 一、基础知识简介 在开始之前,我们需要了解几个基本概念: 1. **Shell.Application ...

    Delphi实现Zip压缩/解压缩

    本主题将详细介绍如何利用XE4自带的System.Zip单元来实现这一功能,并探讨如何在Delphi7中调用这些功能。 首先,`System.Zip`单元是Embarcadero Delphi XE4引入的一个重要组件,它提供了对ZIP文件格式的支持,包括...

    java版zip压缩解压代码

    `java版zip压缩解压代码`提供了在命令行环境中实现这一功能的程序。这个程序主要利用了Java的内置库,尤其是`java.util.zip`包中的类,如`ZipOutputStream`和`ZipInputStream`,来实现对文件和文件夹的ZIP压缩与解压...

    VC zip压缩解压程序

    使用VC实现zip的压缩、解压功能,支持文件、文件夹、密码。 VC use zip unzip and document compression and decompression code, support file, directory.

    AS3.0 ZIP压缩解压

    AS3.0(ActionScript 3.0)是Adobe Flash平台上的编程语言,主要用于创建交互式内容、动画和网络应用程序。...总的来说,理解和掌握AS3.0 ZIP压缩解压的原理和实践,对于开发高效、可靠的Flash应用是至关重要的。

    手机端zip压缩解压器

    本文将详细讲解手机端ZIP压缩解压器的工作原理、功能特性以及如何在移动设备上使用。 ZIP是一种常见的文件压缩格式,由菲尔·卡茨在1989年创建,其主要目的是通过算法减少文件大小,同时保持文件的完整性和可读性。...

    易语言zip解压

    在易语言中处理ZIP压缩文件是一项常见的任务,这涉及到文件的压缩与解压缩操作。本篇文章将详细讲解如何使用易语言来实现ZIP文件的解压功能,以及如何读取ZIP目录和特定的ZIP文件。 首先,我们要理解ZIP文件格式。...

    VC++关于ZIP压缩解压压缩(支持带密码并修复带密码解压的Bug)

    这里只提供4个文件,zip.h,zip.cpp,unzip.h,unzip.cpp。 在VC6.0中,LONGLONG的报错,并修复了HZIP解压带有密码的压缩包,少了12个字节的错误。具体例子在头文件里有。 可以参考文章:...

    ZIP压缩解压器.mrp

    《深入理解ZIP压缩解压技术及其应用》 ZIP文件格式是一种广泛使用的数据压缩和归档格式,它允许用户将多个文件或目录打包成一个单一的ZIP文件,方便存储、传输和分享。ZIP压缩解压器作为处理这种格式的工具,其高效...

    zip压缩解压的源代码

    7. **性能优化**:在实现zip压缩解压时,代码效率也是重要考虑因素。优化可能包括并行处理、内存管理策略和计算资源的高效利用。 8. **安全性**:现代的压缩工具还需要考虑加密功能,确保数据的安全性。例如,PKCS#...

    C++ zip解压缩压缩

    本文将详细介绍一个基于C++的zip文件处理方法,它允许开发者通过仅包含几个头文件就能实现文件的压缩和解压缩功能。这个解决方案简洁易用,非常适合那些需要在C++项目中集成压缩功能的开发者。 标题中的"C++ zip解...

Global site tag (gtag.js) - Google Analytics