`
liufei.fir
  • 浏览: 684988 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java压缩文件

阅读更多
package org.liufei.net.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import org.apache.log4j.Logger;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

/**
 * 
 * @author 刘飞
 * 
 */
public class JavaZip {
	private static final Logger logger = Logger.getLogger(JavaZip.class);

	/**
	 * 压缩文件file成zip文件zipFile
	 * 
	 * @param file
	 *            要压缩的文件
	 * @param zipFile
	 *            压缩文件存放地方
	 * @throws IOException
	 */

	public static void zip(File file, File zipFile) {

		ZipOutputStream output = null;
		try {
			output = new ZipOutputStream(new FileOutputStream(zipFile));
			/**
			 * 顶层目录开始
			 */
			zipFile(output, file, "");
		} catch (IOException ex) {
			logger.error("zip file [ " + file + " ] error.", ex);
			throw new RuntimeException("zip file [ " + file + " ] error.", ex);
		} finally {
			try {
				/**
				 * 关闭流
				 */
				if (output != null) {
					output.flush();
					output.close();
				}
			} catch (IOException e) {
				logger.error("close ZipOutputStream [ file : " + zipFile
						+ " ] error.", e);
				throw new RuntimeException("zip file [ " + zipFile
						+ " ] error.", e);
			}
		}
	}

	/**
	 * 压缩文件为zip格式
	 * 
	 * @param output
	 *            ZipOutputStream对象
	 * @param file
	 *            要压缩的文件或文件夹
	 * @param basePath
	 *            条目根目录
	 * @throws IOException
	 */
	private static void zipFile(ZipOutputStream output, File file,
			String basePath) throws IOException {
		FileInputStream input = null;
		try {
			/**
			 * 文件为目录
			 */
			if (file.isDirectory()) {
				/**
				 * 得到当前目录里面的文件列表
				 */
				File list[] = file.listFiles();
				basePath = basePath + (basePath.length() == 0 ? "" : "/")
						+ file.getName();
				/**
				 * 循环递归压缩每个文件
				 */
				for (File f : list)
					zipFile(output, f, basePath);
			} else {
				/**
				 * 压缩文件
				 */
				basePath = (basePath.length() == 0 ? "" : basePath + "/")
						+ file.getName();
				output.putNextEntry(new ZipEntry(basePath));
				input = new FileInputStream(file);
				int readLen = 0;
				byte[] buffer = new byte[1024 * 8];
				while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1)
					output.write(buffer, 0, readLen);
			}
		} catch (Exception ex) {
			logger.error("zip file [ " + file + " ] error.", ex);
			throw new RuntimeException("zip file [ " + file + " ] error.", ex);
		} finally {
			/**
			 * 关闭流
			 */
			if (input != null)
				input.close();
		}
	}

	/**
	 * 解压zip文件
	 * 
	 * @param zip
	 *            zip文件绝对路径
	 * @param unZipDir
	 *            解压到的目录
	 * @throws IOException
	 */
	public static void unZip(String zip, String unZipDir) throws IOException {
		unZip(new File(zip), new File(unZipDir)) ;
	}

	/**
	 * 解压zip文件
	 * 
	 * @param zip
	 *            zip文件
	 * @param unZipDir
	 *            解压到的目录文件
	 * @throws IOException
	 */
	@SuppressWarnings("unchecked")
	public static void unZip(File zip, File unZipDir) throws IOException {
		ZipFile zipFile = new ZipFile(zip, "GBK");

		byte[] buffer = new byte[2048];
		int length = -1;

		OutputStream out = null;
		InputStream in = null;

		Enumeration<ZipEntry> zee = zipFile.getEntries();
		while (zee.hasMoreElements()) {
			ZipEntry zipEntry = zee.nextElement();
			File loadFile = new File(unZipDir, zipEntry.getName());

			if (zipEntry.isDirectory()) {
				loadFile.mkdirs();
			} else {
				if (!loadFile.getParentFile().exists()) {
					loadFile.getParentFile().mkdirs();
				}
				out = new FileOutputStream(loadFile, false);

				in = zipFile.getInputStream(zipEntry);

				while ((length = in.read(buffer)) > 0) {
					out.write(buffer, 0, length);
				}
			}
		}

		if (in != null) {
			in.close();
		}
		if (out != null) {
			out.flush();
			out.close();
		}
	}
}
分享到:
评论

相关推荐

    java压缩文件代码,压缩(文件) (文件夹) (文件和文件夹混合的)超完整版

    java压缩文件的程序代码,可以压缩单个文件夹,单个标准文件,多个标准文件 多个文件夹,以及文件夹和文件混合的压缩代码

    java压缩文件以及文件夹

    本文将深入探讨如何使用Java来处理压缩文件,特别是针对标题提及的“java压缩文件以及文件夹”。我们将主要关注`ZipCompressor.java`这个类,它是实现文件和文件夹压缩的核心工具。 首先,让我们了解`java.util.zip...

    JAVA压缩文件代码

    在Java编程语言中,压缩文件是一项常见的任务,用于减少文件的存储空间,提高传输效率。HUFFMAN编码是一种数据压缩算法,它基于字符频率构建一棵最优的二叉树来进行编码,广泛应用于文本压缩。本节将详细介绍如何在...

    java压缩文件生成带密码的zip包,解压带密码的zip包的工具类

    压缩文件方法 该方法需要引用zip4j的jar文件 单个文件、多个文件压缩 /** * 使用给定密码压缩指定文件或文件夹到指定位置. * * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者""....

    java压缩文件代码

    ### Java压缩文件代码详解:基于Zip格式的文件压缩技术 #### 概述 在Java编程中,处理文件压缩是一项常见的需求,特别是在数据传输、存储优化或归档管理方面。Java标准库提供了强大的压缩功能,其中最常用的是基于...

    java压缩文件工具类

    工具类中提供的方法有:压缩单个文件,压缩多个文件,解压文件到制定路径下。获取压缩文件的文件列表。压缩文件的文件注释。

    java压缩文件和解压文件

    java压缩文件及解压的算法。方法使用见main函数

    Java压缩文件目录成ZIP包最新技巧

    ### Java压缩文件目录成ZIP包最新技巧 在Java开发中,对文件或目录进行压缩是一项常见且实用的功能。本文将详细介绍如何使用`java.util.zip`包中的类来压缩文件及目录,并解决其中的一个常见问题——中文文件名或...

    java压缩文件时的依赖jar包

    标题提到的"java压缩文件时的依赖jar包"很可能指的是用来解决此类问题的特定库。在这种情况下,`ant.jar`是一个关键的角色,它是Apache Ant项目的组成部分,它是一个基于Java的任务执行框架,常用于构建和部署项目,...

    java压缩文件解压缩和文件的压缩

    2. **压缩文件**: 使用`ZipOutputStream`,你可以将文件或目录添加到ZIP文件中。首先,创建一个`ZipOutputStream`实例,然后通过调用`putNextEntry`方法开始新的`ZipEntry`,接着使用`write`方法写入文件数据,最后...

    java 中 zip压缩文件解压工具类

    本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示...

    java压缩文件,zip打包

    应用java来压缩需要打包的文件,在系统管理中将毛哥路径或者某个文件夹压缩成zip包

    解决java压缩zip文件时的中文乱码问题(包含jar包和工具类)

    解决java压缩zip文件时的中文乱码问题 ...实现:java压缩文件成zip实现无乱码。 包括:写好的工具类与jar包。 使用方法:导入ant.jar包,调用CompressExcelOperate中的方法,即可实现压缩文件,并保证没有中文乱码。

    java压缩zip文件解决中文乱码问题

    zipEntry.setComment("压缩文件"); // 可以添加注释,同样需要指定字符集 zos.putNextEntry(zipEntry); try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { byte[] buffer...

    java 下载文件 压缩且删除源文件(支持文件夹与文件)

    2、指定文件夹(文件夹中必须有一个文件),程序会自动的压缩文件为 zip,然后下载删除源文件与压缩文件。 3、可以指定文件都为最后生成为zip文件下载,且删除源文件。 1、压缩文件或者目录(只是压缩不删除):...

Global site tag (gtag.js) - Google Analytics