java实现解压zip文件

注意:

1:使用jdk自带的zip的util的工具类实现解压zip文件,会出现中文文件名称乱码的问题,apache的zip的工具类改正了这个问题。

 

2:使用apache的zip的工具类,编码方式和项目的编码方式有关系,若你的项目使用的是utf-8的字符编码,则按照utf-8的方式解压缩,或你的工程的字符编码是gbk的项目编码,则按照字符集为gbk的项目编码来进行解压缩

,对于这个字符编码问题,我在写项目中亲自过.

 

3:若用apache的zip类库,来实现压缩或是解压缩,则还是出现文件名称乱码问题,这就需要手动设置字符编码啦。

 

程序代码如下:

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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 Sandy
 * @version $Revision: 1.1 $ 建立日期 2011-7-2
 */
public class ZipFileUtil
{
	private static final Logger		logger	= Logger.getLogger(ZipFileUtil.class);

	private static ZipOutputStream	zipOut;

	private static int				bufSize;

	private static byte[]			buf;

	private static int				readBytes;

	private static final String		_GBK	= "gbk";

	static
	{
		bufSize = 1024;
		buf = new byte[bufSize];
	}

	/**
	 * 压缩文件
	 * 
	 * @param zipDirectory
	 * @param destFileName
	 */
	public static void doZip(String zipDirectory, String destFileName)
	{
		File zipDir = new File(zipDirectory);

		File destFile = new File(destFileName);

		try
		{
			zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(destFile)));
			zipOut.setEncoding(_GBK);

			handleDirectory(zipDir, zipOut);
			zipOut.close();
			logger.info("压缩文件成功...........");
		}
		catch (IOException ex)
		{
			logger.error("压缩文件出错:" + ex.getMessage());
		}
	}

	// call by doZip
	private static void handleDirectory(File dir, ZipOutputStream zipOut) throws IOException
	{
		FileInputStream input;

		File[] files = dir.listFiles();

		if (files.length == 0)
		{

			zipOut.putNextEntry(new ZipEntry(dir.toString() + "/"));
			zipOut.closeEntry();
		} else
		{
			for (File sourceFile : files)
			{

				if (sourceFile.isDirectory())
				{
					handleDirectory(sourceFile, zipOut);
				} else
				{
					input = new FileInputStream(sourceFile);

					zipOut.putNextEntry(new ZipEntry(sourceFile.getName()));

					while ((readBytes = input.read(buf)) > 0)
					{
						zipOut.write(buf, 0, readBytes);
					}

					zipOut.closeEntry();
				}
			}
		}
	}

	public static void unZip(String unZipfileName, String targetfolder)
	{
		FileOutputStream output;
		File file;
		InputStream input;
		ZipFile zipFile;

		try
		{
			zipFile = new ZipFile(unZipfileName, _GBK);

			for (Enumeration<?> entries = zipFile.getEntries(); entries.hasMoreElements();)
			{
				ZipEntry entry = (ZipEntry) entries.nextElement();

				file = new File(targetfolder, entry.getName());

				if (entry.isDirectory())
				{
					file.mkdirs();
				} else
				{
					File parent = file.getParentFile();
					if (!parent.exists())
					{
						parent.mkdirs();
					}

					input = zipFile.getInputStream(entry);

					output = new FileOutputStream(file);
					while ((readBytes = input.read(buf)) > 0)
					{
						output.write(buf, 0, readBytes);
					}
					output.close();

					input.close();
				}
			}
			zipFile.close();
			logger.info("解压文件成功...........");
		}
		catch (IOException ex)
		{
			logger.error("解压文件["+unZipfileName+"]出错:" + ex.getMessage());
		}
	}

	public static void main(String[] args) throws Exception
	{
		// ZipFileUtil.doZip("D:\\unzipDir", "D:\\targetZip\\organ.zip");
		ZipFileUtil.unZip("D:\\ziptest\\ziptest.zip", "D:\\unzipDir");

	}

}

 

Android中用Java代码实现zip文件解压 如果需要下载的文件有很多是中文名的,解压时有中文名的文件出现乱码,试了很多方法不能解决问题。据说有一个Java插件包,用这个插件包可以解决中文名乱码的问题,但不知解压文件是否要用它提供的类压缩后的文件,是否能解决用rar工具压缩的有中文名的文件,这个还没有试过。 参考资料:@1.http://www.oschina.net/code/snippet_4873_4142 阅读详情

相关推荐

Java实现zip文件压缩与解压缩--附完整代码

Java实现文件压缩与解压缩-----zip、.7z1. 基本概念1.1 Java实现zip的压缩与解压缩1.1.1 基本概念1.1.2 zip压缩代码实现1.3 zip压缩代码改进 1. 基本概念 1.1 Java实现zip的压缩与解压缩 1.1.1 基本概念 ZipOutputStream 实现文件的压缩 ZipOutputStream (OutputStream out) 创建新...

TingtingYang 6万+

java 解压文件_java实现解压zip文件,(亲测可用)!!!!!!

项目结构:Util.java内容:package com.cfets.demo;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.nio.charset.Ch...

weixin_28923881的博客 5052

Java压缩解压ZIP文件功能实现指南

ZIP文件格式是一种常用的压缩文件格式,它能够将多个文件合并存储到一个文件中,并通过压缩算法减小文件体积。ZIP文件的扩展名为.zip,它支持跨平台使用,并且可以压缩几乎所有类型的文件ZIP格式的一个显著优点是压缩速度较快,且支持文件的分卷压缩,便于大文件的传输。ZIP文件包含一个压缩目录,其中存储了文件元数据和压缩数据。元数据部分包括文件名、大小、日期、时间、压缩方法以及可能的文件注释等信息。压缩数据部分则是文件内容经过特定算法压缩后的数据。

weixin_42608318的博客 1148

JAVA实现压缩解压文件

JAVA实现压缩解压文件

xingchenyv的博客 1万+

java解压zip文件

【代码】java解压zip文件代码实现

mischen520的博客 3432

Java Zip压缩&解压的三种方式

文章内容列表 使用ZipFile解压文件 使用ZipInputStream解压文件流 使用ZipOutputStream压缩批量文件 说明:本文代码使用的是jdk自带的zip包,如果涉及中文文件名的场景可以使用apache的commons-compress包,代码相差不多,maven依赖如下: <dependency> <grou...

DreamSeeker 1万+

java zip 解压代码_基于JAVA代码实现zip文件解压

在文档管理系统中需要实现zip文件的预览,一般的做法是将zip文件解压,然后获取此目录下的文件信息,此处代码为利用代码直接实现zip文件解压:import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputS...

weixin_39736379的博客 166

JAVA实现zip文件解压

 需要jar包:ant-1.7.1.jarimport java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.util.regex.Matcher;import java.util.regex.Pattern;import ...

学以致用 4333

java zip文件解压_Java实现文件压缩与解压[zip格式,gzip格式]

Java实现ZIP解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例。zip扮演着归档和压缩两个角色;gzip并不将文件归档,仅只是对单个文件进行压缩,所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩。Java I/O类库还收录了一些能读写压缩格式流的类。要想提供压缩功...

weixin_42340136的博客 392

java zipfile用法_Java使用ZipFile类实现Zip文件解压

java.util.zip.ZipFile类用于从 ZIP 文件读取条目。 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称、是否为目录等信息。可以使用这个类来实现zip文件进行解压操作。ZipFile类的构造方法:ZipFile(Filefile)使用给定的File对象打开一个Zip文件ZipFile(Filefile,intmode)打开新的 ZipFile 以使用指定...

weixin_33814002的博客 7508

java 实现zip文件解压

java 实现zip文件解压缩。

VuezzTI的博客 212

java解压zip压缩包

java 解压压缩包,java 实现解压 zip 压缩包。坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,我索引给他写了个 demo ,也顺手记录一下。

yuhuofei的草屋 1万+

Java】压缩包解压实现过程

解压文件过程中,主要是对流的读取操作,注意进行异常处理,以及关闭流。解压文件时,注意空文件夹的处理。

weixin_71491685的博客 7607

Java解压文件的方法

文件解压缩,它提供了读取 ZIP 文件内容的功能,允许你以编程方式从 ZIP 文件中提取文件和目录结构,以及读取其中的数据。我这里解压缩的时候获取了某个固定文件类型的文件路径集合,如果需要在解压缩的时候做逻辑处理,可以参考。上传一个压缩包文件,会将压缩包文件下载到本地,然后再将压缩包解压到同目录下的extracted文件夹下。每个条目代表 ZIP 文件中的一个文件或目录。2、转换为File类型时就需要先将文件存到本地,所以在这里指定了一个压缩包的文件路径。方法,你可以从 ZIP 文件中提取特定文件的内容。

Keep__Me的博客 6579

Java实现Zip压缩包解压

zip压缩包的解压是比较常见的应用场景,java代码的实现也很简单。废话不多说,直接上代码吧 一、代码 /** * zip解压 * @param srcFile zip文件 * @param destDirPath 解压后的目标文件夹 * @throws RuntimeException 解压失败会抛出运行时异常 */ publi...

denghonghao的博客 4万+

Javazip文件压缩与解压ZipInputStream,ZipOutputStream

通过上面的例子,我们知道压缩包里的是一个个ZipEntry对象,在解压时,可以遍历压缩包获取到ZipEntry对象。每一个ZipEntry对象都是一个文件,使用ZipFile可以获取到每一个ZipEntry对象的文件流;获取到文件流就可以将压缩包的文件读出来了。在创建ZipEntry对象时可以指定文件在压缩包的位置:new ZipEntry(“second-dir\second-01.txt”)用ZipOutputStream来压缩一个文件夹时,要搭配ZipEntry来使用。

Myd 1万+
上一篇: 2007 Microsoft Office system 不支持从预发布版的 2007 Microsoft Office system 升级
下一篇: shell命令执行java程序
iteye_6751
博客等级 码龄8年 4粉丝 54原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值