`
royzhou1985
  • 浏览: 253369 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java实现Zip压缩与解压(解决中文乱码问题)

    博客分类:
  • Java
阅读更多
解决中文压缩与解压问题
使用的是org.apache.tools.zip包下面的相关类
下面是自己写的类,可以设置和获取Zip文件的注释信息
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

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


public class ZipUtil {
	
	private String comment = "";
	
	public void setComment(String comment) {
		this.comment = comment;
	}

	/**
	 * @param src:要压缩的目录
	 * @param dest:压缩文件存档
	 * @throws Exception
	 */
	public void zip(String src, String dest, List filter) throws Exception {
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(dest));
		File srcFile = new File(src);
		zip(out,srcFile,"",filter);
		out.close();
	}
	
	/**
	 * @param out
	 * @param srcFile
	 * @param base:根路径
	 * @param filter:过滤
	 * @throws Exception
	 */
	public void zip(ZipOutputStream out, File srcFile, String base, List filter) throws Exception {
		if(srcFile.exists()==false) {
			throw new Exception("压缩目录不存在!");
		}
		
		if(srcFile.isDirectory()) {
			File[] files = srcFile.listFiles();
			base = base.length() == 0 ? "" : base + "/";
			if (isExist(base, filter)) {
				out.putNextEntry(new ZipEntry(base));
			}
			for(int i=0; i<files.length; i++) {
				zip(out,files[i],base + files[i].getName(),filter);
			}
		} else {
			if (isExist(base, filter)) {
				base = base.length() == 0 ? srcFile.getName() : base ;
				ZipEntry zipEntry = new ZipEntry(base);
				zipEntry.setComment(comment);
				out.putNextEntry(zipEntry);
				FileInputStream in = new FileInputStream(srcFile);
				int length = 0;
				byte[] b = new byte[1024];
				while((length=in.read(b,0,1024))!=-1) {
					out.write(b,0,length);
				}
				in.close();
			}
		}
	}
	
	/**
	 * 过滤出要压缩的文件夹
	 * @param base
	 * @param list
	 * @return
	 */
	public boolean isExist(String base, List list) {
		if (list != null && !list.isEmpty()) {
			for (int i = 0; i < list.size(); i++) {
				if (base.indexOf((String) list.get(i)) >= 0) {
					return true;
				}
			}
		}
		return false;
	}
	
	/**
	 * @param srcFile:压缩文件路径
	 * @param dest:解压到的目录
	 * @param deleteFile:解压完成后是否删除文件
	 * @throws Exception
	 */
	public void unZip(String srcFile,String dest,boolean deleteFile)  throws Exception {
		File file = new File(srcFile);
		if(!file.exists()) {
			throw new Exception("解压文件不存在!");
		}
		ZipFile zipFile = new ZipFile(file);
		Enumeration e = zipFile.getEntries();
		while(e.hasMoreElements()) {
			ZipEntry zipEntry = (ZipEntry)e.nextElement();
			if(zipEntry.isDirectory()) {
				String name = zipEntry.getName();
				name = name.substring(0,name.length()-1);
				File f = new File(dest + name);
				f.mkdirs();
			} else {
				File f = new File(dest + zipEntry.getName());
				f.getParentFile().mkdirs();
				f.createNewFile();
				InputStream is = zipFile.getInputStream(zipEntry);
				FileOutputStream fos = new FileOutputStream(f);
				int length = 0;
				byte[] b = new byte[1024];
				while((length=is.read(b, 0, 1024))!=-1) {
					fos.write(b, 0, length);
				}
				is.close();
				fos.close();
			}
		}
		
		if (zipFile != null) {
			zipFile.close();
		}
		
		if(deleteFile) {
			file.deleteOnExit();
		}
	}
	
	/**
	 * 获取Zip文件的注释信息
	 * @param srcFile
	 * @return
	 */
	public static String getZipComment(String srcFile) {
		String comment = "";
		try {
			ZipFile zipFile = new ZipFile(srcFile);
			Enumeration e = zipFile.getEntries();

			while (e.hasMoreElements()) {
				ZipEntry ze = (ZipEntry) e.nextElement();

				comment = ze.getComment();
				if (comment != null && !comment.equals("")
						&& !comment.equals("null")) {
					break;
				}
			}

			zipFile.close();
		} catch (Exception e) {
			System.out.println("获取zip文件注释信息失败:" + e.getMessage());
		}

		return comment;
	}

	public static void main(String[] args) throws Exception {
		long begin = System.currentTimeMillis();
		ZipUtil zu = new ZipUtil();
		List<String> filter = new ArrayList<String>();
		filter.add("3RDPARTY");
		filter.add("BANNER.GIF");
		zu.setComment("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
		zu.zip("C:/VALUEADD", "c:/hh.zip",filter);
		System.out.println(ZipUtil.getZipComment("c:/hh.zip"));
		//new ZipUtil().unZip("c:/tt.zip", "c:/mmmmmmmmmmmmmmmmmmm/", true);
		//File f = new File("c:/hh.zip");
		//f.deleteOnExit();
		long end = System.currentTimeMillis();
		System.out.println(end-begin);
	}
}




分享到:
评论
11 楼 imbangbang 2014-09-17  
中文乱码,没有解决掉
10 楼 chjy1983 2014-07-01  
麻烦也发份给我,chl_82@126.com,谢谢!
9 楼 lihua2008love 2011-09-30  
可不可以把org.apache.tools.zip包 发我一份  谢谢了,非常感谢了。。谢谢了、、、   lihua2008love@163.com
8 楼 java_doc 2011-09-22  
你确定解决了中文乱码问题,如果zip里面有中文还是一样的乱码。
7 楼 bjqincy 2010-07-09  
org.apache.tools.zip 的jar 就是ant 的jar
6 楼 gghui_168 2010-06-13  
可不可以把org.apache.tools.zip包 发我一份  谢谢了 gghui_168@hotmail.com
5 楼 beifengbei08 2010-06-13  
把zip包加到附件里面可以下载吧,谢谢啦。
4 楼 Spiderweb 2010-06-12  
可不可以把org.apache.tools.zip包 也发我一份啊  谢谢了 spider_web@163.com
3 楼 c15836 2010-06-12  
可不可以把org.apache.tools.zip包 也发我一份啊  谢谢了  hdj5198@163.com
2 楼 royzhou1985 2009-06-22  
coolboy8008 写道
可不可以把org.apache.tools.zip包 发我一份  谢谢了  coolboy8008@163.com

已经发送过去了 请查收
1 楼 coolboy8008 2009-06-11  
可不可以把org.apache.tools.zip包 发我一份  谢谢了  coolboy8008@163.com

相关推荐

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

    在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...

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

    总结来说,处理Java中ZIP文件的中文乱码问题,关键在于明确指定字符集,通常是UTF-8,无论是使用Java内置的API还是第三方库。同时,理解文件系统的编码和压缩/解压过程中的字符编码转换也非常重要。通过这种方式,...

    java android zip解压缩(解决压缩中文乱码问题)

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    java zip解压中文乱码问题

    网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...

    文件解压和压缩 解决中文乱码

    这里我们关注的是“文件解压和压缩”以及处理“中文乱码”的问题。在Java编程语言中,提供了多种库和工具来处理这些问题。 首先,`CompresszZipFile`是一个可能的自定义类或方法,它专门用于处理ZIP文件的解压。在...

    Java中压缩与解压--中文文件名乱码解决办法

    ### Java中压缩与解压——中文文件名乱码解决办法 #### 一、问题背景及原理分析 在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名...

    解压zip压缩文件,支持多文件目录解压,中文乱码问题

    在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,...

    JDK ZipEntry压缩中文文件名乱码解决

    项目中碰到问题.jdk zipEntry 压缩中文文件名乱码  上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项.  第二种 就是拿来主义,因为 开源项目 Ant 里已经有...

    org.apache.tools.zip解决解压乱码问题

    * @param targetPath 解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下 * void */ public static void unzip(String zipFilePath, String targetPath) throws ...

    java zipentry.jar 解决解压失败问题

    这就可能导致在Java中解压包含非ASCII字符(如中文)的ZIP文件时出现问题。 Java的`java.util.zip`包提供了对ZIP文件的支持,包括`ZipInputStream`和`ZipOutputStream`类用于读写ZIP文件,以及`ZipEntry`类来代表...

    用java对文件进行压缩并且解决乱码问题

    下面我们将详细探讨如何使用`ZipOutputStream`进行文件压缩,并解决可能出现的乱码问题。 首先,让我们了解如何使用`ZipOutputStream`进行文件压缩的基本步骤: 1. 创建一个`FileInputStream`,用于读取要压缩的...

    zip解压缩乱码的解决方案

    本文将深入探讨ZIP解压缩乱码的解决方案,帮助你解决这个问题。 1. **理解字符编码** - 字符编码是计算机存储和显示文本的方式,常见的有ASCII、GBK、UTF-8等。不同的编码方式对于特殊字符的表示不同,如果编码不...

    ZipUtil文件压缩工具类(解决中文乱码)

    总之,`ZipUtil`文件压缩工具类通过结合`ZipEntry`和`ZipOutputStream`,提供了一种高效且健壮的解决方案,尤其适合处理包含中文字符的文件和目录,确保在压缩和解压过程中不会出现乱码问题。这对于需要在Java应用...

    java解决压缩中文乱码

    总的来说,解决Java压缩中文乱码问题的关键在于正确处理文件名的编码,确保使用UTF-8编码,并在必要时自定义压缩和解压缩流。通过上述方法,即使不依赖第三方库,也可以在Java程序中实现对中文文件名的完美支持。

    Java ZIP压缩一个或多个文件(解决中文名称乱码).rar

    用java.util.zipoutputstream压缩会出现中文的文件名乱码的情况,且无法设置字符集,这个版本用org.apache.tools.zip.ZipOutputStream压缩,可以自定义字符集,解决中文的文件名乱码问题。

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

    总之,解决Java压缩ZIP文件中文乱码问题的关键在于使用支持设置编码的第三方库,并在处理中文内容和注释时明确指定正确的字符编码。这样,无论在何种编码环境中,都能确保中文字符正确无误地被压缩和解压。

    Java压缩和解压缩zip文件

    本篇文章将详细探讨如何使用Java内置的类库来实现ZIP文件的压缩和解压缩,以及解决中文文件名出现乱码的问题。 首先,我们要了解Java中处理ZIP文件的核心类:`java.util.zip.ZipOutputStream` 和 `java.util.zip....

    java解压zip时中文名称解决方法

    在Java编程中,处理压缩文件,特别是包含中文文件名的ZIP文件时,常常会遇到乱码问题。这是因为Java默认的字符编码与ZIP文件中的编码不一致导致的。本篇文章将详细探讨如何解决Java解压ZIP文件时遇到的中文名称问题...

    基于Java向zip压缩包追加文件

    通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...

    java解压和压缩tar包

    本文将详细讲解如何使用Java来解压和压缩tar包,同时解决在处理中文文件名时可能出现的乱码问题,主要关注`javatar-2.5.jar`库中的功能以及`TarUtil.java`类的应用。 首先,`javatar-2.5.jar`是一个专门用于处理tar...

Global site tag (gtag.js) - Google Analytics