`
yyys8517750
  • 浏览: 143343 次
  • 性别: Icon_minigender_1
  • 来自: 岳阳
社区版块
存档分类
最新评论

zip压缩解压

    博客分类:
  • zip
 
阅读更多

中文乱码:用org.apache.tools.zip.*;

设置Encoding,测试的时候用的GBK结果是ok的,换成用UTF-8就乱码了,先放下,有空再来补

 

 

package com.ys.action.zip;
import java.io.BufferedInputStream;
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.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipFile;
//import java.util.zip.ZipOutputStream;
import org.apache.commons.lang.SystemUtils;
import org.apache.tools.zip.*; 

/**
 * 压缩
 * @author hp
 *
 */
public class ZipToFile {
	
	public static final String ZIP_FILENAME	= "E:\\东西.zip";//需要解压缩的文件名
	public static final String ZIP_DIR = "E:\\东西\\";//需要压缩的文件夹
	public static final String UN_ZIP_DIR = "E:\\东西2";//要解压的文件目录
	public static final int BUFFER = 1024 ;//缓存大小
	
	public static void main(String[] args) throws Exception {

		zipFile(ZIP_DIR, ZIP_FILENAME);
		System.out.println("----------");
		unZipFile(ZIP_FILENAME,UN_ZIP_DIR);
	}
	
	/**
	* zip压缩功能.
	* 压缩baseDir(文件夹目录)下所有文件,包括子目录
	* @throws Exception
	*/
	public static void zipFile(String baseDir,String fileName) throws Exception{
		List fileList=getSubFiles(new File(baseDir));
		ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));
		zos.setEncoding("GBK");//设置的和文件名字格式一样或开发环境编码设置一样的话就能正常显示了
		ZipEntry ze=null;
		byte[] buf=new byte[BUFFER];

			
		int readLen=0;
		for(int i = 0; i <fileList.size(); i++) {
			File f=(File)fileList.get(i);
			ze=new ZipEntry(getAbsFileName(baseDir, f));
		
			System.out.println(ze.getName());
			ze.setSize(f.length());
			ze.setTime(f.lastModified());	
			zos.putNextEntry(ze);
			InputStream is=new BufferedInputStream(new FileInputStream(f));
	
			while ((readLen=is.read(buf, 0, BUFFER))!=-1) {
				zos.write(buf, 0, readLen);
				
			}
			is.close();
		}
		zos.close();
		System.out.println("ZIP ok");
	}
	
	/**
	* 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.
	* @param baseDir java.lang.String 根目录
	* @param realFileName java.io.File 实际的文件名
	* @return 相对文件名
	*/
	private static String getAbsFileName(String baseDir, File realFileName){
		File real=realFileName;
		File base=new File(baseDir);
		String ret=real.getName();
		while (true) {
			real=real.getParentFile();
			if(real==null) 
				break;
			if(real.equals(base)) 
				break;
			else
				ret=real.getName()+"/"+ret;
		}
		return ret;
	}
	
	/**
	* 取得指定目录下的所有文件列表,包括子目录.
	* @param baseDir File 指定的目录
	* @return 包含java.io.File的List
	*/
	private static List getSubFiles(File baseDir){
		List ret=new ArrayList();
		File[] tmp=baseDir.listFiles();
		for (int i = 0; i <tmp.length; i++) {
			if(tmp[i].isFile())
				ret.add(tmp[i]);
			if(tmp[i].isDirectory())
				ret.addAll(getSubFiles(tmp[i]));
		}
		return ret;
	}
	
	/**
	* zip解压功能.
	* 解压unZipFileName文件到unZipPath路径
	* @throws Exception
	*/
	 public static void unZipFile(String unZipFileName, String unZipPath)
     throws Exception {
	   ZipFile zipFile = new ZipFile(
	   unZipFileName, "gbk");
	   unZipFileByOpache(zipFile, unZipPath);
	   System.out.println("unZip Ok");
	 }
	 
	 /**
	  * 解压流
	  * @param zipFile
	  * @param unZipRoot
	  * @throws Exception
	  * @throws IOException
	  */
	 @SuppressWarnings("unchecked")
	public static void unZipFileByOpache(ZipFile zipFile,
		      String unZipRoot) throws Exception, IOException {
		    Enumeration e = zipFile.getEntries();
		    System.out.println(zipFile.getEncoding());
		    ZipEntry zipEntry;
		    while (e.hasMoreElements()) {
		      zipEntry = (ZipEntry) e.nextElement();
		      InputStream fis = zipFile.getInputStream(zipEntry);
		      if (zipEntry.isDirectory()) {
		      } else {
		        File file = new File(unZipRoot + File.separator + zipEntry.getName());
		        System.out.println(file.getName());
		        File parentFile = file.getParentFile();
		        parentFile.mkdirs();
		        FileOutputStream fos = new FileOutputStream(file);
		        byte[] b = new byte[1024];
		        int len;
		        while ((len = fis.read(b, 0, b.length)) != -1) {
		          fos.write(b, 0, len);
		        }
		        fos.close();
		        fis.close();
		      }
		    }
		  }

}

 

分享到:
评论

相关推荐

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

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

    手机端zip压缩解压器

    《手机端ZIP压缩解压器详解》 在数字化时代,数据和文件的传输与存储日益频繁,文件压缩技术成为了一种高效便捷的方式。特别是在手机端,由于存储空间有限,使用ZIP压缩工具能有效节省空间,便于管理和传输文件。...

    ZIP压缩解压器.mrp

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

    java版zip压缩解压代码

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

    不错的ZIP压缩解压组件

    本篇文章将深入探讨“不错的ZIP压缩解压组件”,它具有对目录的支持、解压密码功能,并允许通过函数直接调用,为开发者提供了极大的便利。 ZIP是一种广泛使用的文件压缩格式,它能够将多个文件打包成一个单一的文件...

    java Zip压缩解压

    总结来说,"java Zip压缩解压"涉及了Java标准库中的`java.util.zip`包,用于创建和读取ZIP文件;Apache Ant作为构建工具,可能用于自动化压缩和解压过程;而JUnit则用于编写和运行测试,确保代码的正确实现。在实际...

    zip压缩解压的源代码

    本文将深入探讨zip压缩解压的源代码,以及其中涉及的关键知识点。 首先,我们需要了解zip文件的结构。一个zip文件包含一个中央目录,记录了所有压缩文件的信息,如文件名、压缩方法、时间戳等。此外,每个压缩文件...

    AS3.0 ZIP压缩解压

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

    .net zip压缩解压动态库源码

    .NET Zip压缩解压动态库源码是用于处理ZIP文件的核心工具,主要针对C#开发者设计。这个库使得在C#应用程序中对ZIP文件进行压缩和解压缩变得简单易行,只需要少量的代码即可完成相关操作。这样的库对于需要频繁处理...

    php 站点在线zip压缩解压缩小程序

    "php 站点在线zip压缩解压缩小程序"正是针对这一需求而设计的,它允许用户直接通过PHP在服务器上对ZIP文件进行操作,无需额外的软件工具。 这个小程序的核心功能包括两部分:解压(jieya.php)和压缩(yasuo.php)...

    C#实现Zip压缩解压

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

    java jar包 ZIp压缩解压 数据库连接驱动 XML解析

    在Java编程领域,有三个关键知识点紧密关联:Java JAR包、ZIP压缩解压和XML解析,以及数据库连接驱动。让我们逐一深入探讨这些主题。 首先,Java JAR(Java Archive)包是Java平台的一种归档格式,用于集合多个类...

    支持中文的zip压缩解压

    "支持中文的zip压缩解压"这个话题对于处理包含中文文件名或路径的文件集合尤其重要。在许多编程语言中,包括Java,处理中文字符可能会遇到编码问题,导致在压缩或解压缩过程中出现乱码。以下是对这一主题的详细解释...

    c语言zip压缩解压源码整理

    本资源"c语言zip压缩解压源码整理"聚焦于C语言实现ZIP文件的压缩与解压功能,特别强调了支持加密和解密算法,这对于数据安全性和隐私保护具有重要意义。 ZIP是一种常见的文件格式,它允许用户将多个文件和目录打包...

    zip压缩解压_小程序_205953.zip

    标题中的“zip压缩解压”指的是使用ZIP格式进行文件压缩和解压的操作。ZIP是一种广泛使用的文件归档格式,它允许将多个文件和文件夹打包成一个单一的压缩文件,以便于存储、传输或备份。在小程序开发中,ZIP文件常...

    qt 7zip压缩解压含进度1.1

    内容概要:qt5 调用 7zip库的压缩解压功能,且通过信号发出压缩解压的进度,主程序在bin目录中。 适用人群:qt5开发人员 适用场景:用的编译环境是qt5.12.2+vs2017,系统是windows10. lib目录中OleAut32.Lib和User32....

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

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

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

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

    zip压缩解压库

    ZipTool 压缩,解压代码库,Gzip的使用,调用ICSharpCode.SharpZipLib 库。

    C#Zip压缩解压

    在.NET框架中,C#程序员可以使用不同的库来处理ZIP压缩和解压缩任务。本教程将深入探讨如何在C#中实现ZIP文件的压缩与解压缩功能,这将基于描述中提到的“绝对能用的zip解压类”。我们将讨论核心的System.IO....

Global site tag (gtag.js) - Google Analytics