`
yangzc106
  • 浏览: 156715 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

发个文件压缩解压的代码吧。

 
阅读更多
我是代码派
public class ZipUtils {

	/**
	 * 解压文件
	 * @param zipPath
	 * @param toPath
	 * @throws IOException
	 */
	public static void unCompress(String zipPath, String toPath) throws IOException {
		if(!toPath.endsWith("\\"))toPath += "\\";
		File destFile = new File(toPath);
		if(!destFile.exists())destFile.mkdirs();
		File zipfile = new File(zipPath);
		ZipInputStream zis = new ZipInputStream(new FileInputStream(zipfile));
		ZipEntry entry = null;
		while ((entry = zis.getNextEntry()) != null) {
			if (entry.isDirectory()) {
				File file = new File(toPath + entry.getName() + "\\");
				file.mkdirs();
			} else {
				File file = new File(toPath + entry.getName());
				if(!file.getParentFile().exists())file.getParentFile().mkdirs();
				FileOutputStream fos = new FileOutputStream(file);
				byte buf[] = new byte[1024];
				int len = -1;
				while ((len = zis.read(buf, 0, 1024)) != -1) {
					fos.write(buf, 0, len);
				}
				fos.close();
			}
		}
		zis.close();
	}
	
	public static byte[] getData(String zipPath, String path) throws IOException{
		File zipfile = new File(zipPath);
		ZipInputStream zis = new ZipInputStream(new FileInputStream(zipfile));
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ZipEntry entry = null;
		while ((entry = zis.getNextEntry()) != null) {
			if(entry.getName().equals(path)){
				byte buf[] = new byte[1024];
				int len = -1;
				while ((len = zis.read(buf, 0, 1024)) != -1) {
					baos.write(buf, 0, len);
				}
				break;
			}
		}
		baos.close();
		zis.close();
		return baos.toByteArray();
	}

	/**
	 * 压缩单个文件
	 * @param file
	 */
	public static void compress(File file) {
		try {
			String fileName = file.getName();
			if(fileName.indexOf(".") != -1)
				fileName = fileName.substring(0, fileName.indexOf("."));
			FileOutputStream f = new FileOutputStream(file.getParent() + "/" + fileName+ ".zip");
			CheckedOutputStream cs = new CheckedOutputStream(f, new Adler32());
			ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cs));
			InputStream in = new FileInputStream(file);
			out.putNextEntry(new ZipEntry(file.getName()));
			int len = -1;
			byte buf[] = new byte[1024];
			while((len = in.read(buf, 0, 1024)) != -1)
				out.write(buf, 0, len);
			out.closeEntry();
			
			in.close();
			out.close();
		} catch (Exception e) {
			System.err.println(e);
		}
	}

	/**
	 * 压缩文件夹
	 * @param file
	 * @throws IOException
	 */
	public static void compressDir(File file) throws IOException{
		FileOutputStream f = new FileOutputStream(file.getParent() + file.getName() + ".zip");
		CheckedOutputStream cs = new CheckedOutputStream(f, new Adler32());
		ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cs));
		
		compressDir(file, out, file.getAbsolutePath());
		
		out.flush();
		out.close();
	}
	
	/**
	 * 压缩文件夹递归调用方法
	 * @param file
	 * @param out
	 * @throws IOException
	 */
	private static void compressDir(File srcFile, ZipOutputStream out, String destPath) throws IOException{
		if(srcFile.isDirectory()){
			File subfile[] = srcFile.listFiles();
			for(int i=0; i< subfile.length; i++){
				compressDir(subfile[i], out, destPath);
			}
		}else{
			InputStream in = new FileInputStream(srcFile);
			String name = srcFile.getAbsolutePath().replace(destPath, "");
			if(name.startsWith("\\"))name = name.substring(1);
			ZipEntry entry = new ZipEntry(name);
			entry.setSize(srcFile.length());
			entry.setTime(srcFile.lastModified());
			out.putNextEntry(entry);
			int len = -1;
			byte buf[] = new byte[1024];
			while((len = in.read(buf, 0, 1024)) != -1)
				out.write(buf, 0, len);
			
			out.closeEntry();
			in.close();
		}
	}
	
	public static void main(String[] args) throws Exception {
		ZipUtils.compress(new File("d:/aa/a01.jpg"));

//		try {
//			byte buf[] = ZipDemo.getData("d:/aa.zip", "aa.txt");
//			System.out.println(buf.length);
//			ZipDemo.unCompress("d:/aa.zip", "d:/kk/");
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
	}

 

分享到:
评论

相关推荐

    易语言模块文件压缩解压.rar

    在“易语言模块文件压缩解压.rar”这个压缩包中,包含的资源很可能是用于处理易语言程序中文件压缩和解压功能的模块。下面将详细介绍这个主题中的相关知识点。 一、易语言模块 易语言模块是易语言编程中的一个重要...

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

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

    zip压缩解压的源代码

    总的来说,"zip压缩解压的源代码"涉及到多个IT领域的知识,包括数据压缩理论、文件系统操作、GUI编程、错误处理、性能优化以及跨平台开发。通过深入理解这些源代码,开发者可以定制自己的压缩工具,满足特定需求或...

    java 解压,压缩linux GZ压缩文件

    GZ是一种常用的文件压缩格式,它利用了gzip程序进行压缩,而在Java中,我们可以使用`java.util.zip`包中的类来实现对GZ文件的压缩和解压缩操作。 在给出的代码中,有两个主要的方法:`testGzipOutput()`用于解压GZ...

    MFC的极其简单的压缩和解压代码

    总的来说,MFC的文件压缩和解压涉及到了文件操作、流处理、内存管理、以及第三方压缩库的使用等多个方面的知识。通过`unzip.cpp`、`zip.cpp`、`unzip.h`和`zip.h`这四个文件,我们可以学习到如何将这些技术整合到MFC...

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

    ZIP是一种广泛使用的文件压缩格式,它能够将多个文件打包并压缩成一个单一的ZIP档案,以便于存储、传输和分享。ZIP文件格式的标准由PKWARE公司制定,并由Info-ZIP组织进行开源实现。在C语言中实现ZIP操作,我们需要...

    文件压缩解压接口调用

    在IT行业中,文件压缩与解压是常见的操作,特别是在数据传输和存储方面。本文将深入探讨如何使用C++实现文件压缩解压接口调用,并基于提供的...通过理解和应用这些知识,你可以构建一个功能完善的文件压缩解压工具。

    哈夫曼树压缩解压C++代码

    `SRC`文件可能包含了C++源代码,展示如何构建哈夫曼树、生成编码、压缩和解压数据的具体实现。`DOC`文件可能是实验报告,详细解释了这些过程并分析了算法的效率。`EXE`文件则可能是编译后的可执行程序,可以直接运行...

    java操作压缩文件和解压文件实例代码(经测试)

    虽然Ant本身不是直接用于文件压缩,但它包含的`ZipTask`和`UnzipTask`可以方便地在Ant脚本中进行文件压缩和解压。如果`ZipFileList.java`使用了Ant的功能,那么可能通过`org.apache.tools.ant.types.FileSet`选择要...

    php在线压缩解压源代码

    在标题为"php在线压缩解压源代码"的资源中,我们可以利用PHP的ZipArchive类来实现这个目标。 1. **ZipArchive类介绍** ZipArchive是PHP内建的一个类,用于处理.zip格式的压缩文件。它可以用来创建、打开、修改、...

    java版zip压缩解压代码

    以上就是关于`java版zip压缩解压代码`的相关知识点,这个程序的核心在于理解和使用`java.util.zip`包中的类,同时还需要掌握文件I/O和命令行参数处理等基础知识。在实际开发中,这样的工具可以方便地集成到自动化...

    txt文件压缩解压程序

    总结来说,这个"txt文件压缩解压程序"利用了赫夫曼编码的高效压缩特性,并结合Xcode的开发工具,实现了对txt文件的压缩和解压功能。通过理解赫夫曼编码的工作原理和Xcode的使用,我们可以更好地理解和应用这个程序,...

    运用哈夫曼编码压缩解压文件源代码

    哈夫曼编码压缩解压文件源代码 哈夫曼编码是一种变长前缀编码方案,用于压缩数据。哈夫曼树是一种特殊的二叉树,它的每个叶子结点对应一个字符,而每个内部结点对应一个符号的频率信息。哈夫曼编码的基本思想是:将...

    zip 格式文件 压缩 解压缩 源代码 VC6.0 VS2008 测试程序

    ZIP是一种广泛使用的文件压缩格式,它允许用户将多个文件或目录打包成一个单一的压缩文件,以便于存储、传输和分发。ZIP格式的普及源于其高效的数据压缩算法和跨平台的支持,使得无论是Windows、Mac还是Linux系统,...

    易语言解压目录中的所有压缩文件源码.7z

    这个过程可能涉及到打开压缩文件、获取文件列表、选择需要解压的文件以及指定目标解压路径等多个步骤。在易语言中,这通常需要编写自定义的函数或者子程序来封装这些操作。 6. **错误处理** 在编程过程中,错误...

    Zlib压缩解压工具

    总的来说,Zlib压缩解压工具是一个方便的数据处理工具,适用于开发人员和日常用户,尤其是那些需要频繁处理大量数据的场景。通过其强大的压缩功能,用户可以有效减小文件大小,优化存储和传输效率。在使用过程中,...

    基于哈夫曼编码的文件压缩解压程序的C语言实现

    总的来说,基于哈夫曼编码的文件压缩解压程序的C语言实现涉及到了数据结构(如链表和堆)、算法(哈夫曼树的构建和遍历)、文件操作以及错误处理等多个方面的知识。通过这样的实践,不仅可以深入理解哈夫曼编码,还...

    golang 文件夹压缩解压代码

    这段代码会打开ZIP文件,遍历每个条目,如果是文件则将其解压到目标目录,如果是目录则创建对应的目录结构。 注意,上述代码仅适用于ZIP格式的压缩。如果你需要处理其他格式(如GZ或TGZ),可能需要使用其他的库,...

    实现文件的压缩与解压.rar( VC++ 源代码)

    6. 用户界面和控制流程:为了让用户能方便地使用,程序可能还包括一个简单的图形用户界面(GUI),以及处理用户输入和控制压缩解压流程的逻辑。 总的来说,这个压缩包中的源代码是一个实用的教程,可以帮助开发者...

    Linux c++ 实现哈夫曼文件压缩与解压+迷宫

    在本项目中,我们主要探讨的是利用Linux操作系统下的C++编程语言实现哈夫曼编码进行文件的压缩与解压,并且结合生成随机迷宫及寻找最短路径算法。以下是相关知识点的详细说明: 1. **哈夫曼编码**:哈夫曼编码是一...

Global site tag (gtag.js) - Google Analytics