`

<ZIPUtil >java 打包文件(文件夹)为 zip压缩包 java 压缩文件

阅读更多

         使用JAVA本身的ZIP API打包带有中文名称的文件(目录)会出现乱码,且winzip无法解压,如果要解决此问题,可以将

import java.util.zip.ZipOutputStream;
import java.util.zip.ZipEntry;

换为ant.jar中的API

	/**
	 * 压缩文件(.zip)的函数 
	 * @param zipDirectory:(需要)压缩的文件夹路径
	 * @param zipPath:文件压缩后放置的路径,该路径可以为null,null表示压缩到原文件的同级目录
	 * @return :返回一个压缩好的文件(File),否则返回null
	 */
	public File doZip(String zipDirectory, String zipPath) {
		File zipDir = new File(zipDirectory);

		if (zipPath == null) {
			zipPath = zipDir.getParent();
		}

		// 压缩后生成的zip文件名
		String zipFileName = zipPath + "/" + zipDir.getName() + ".zip";

		try {
			zipOut = new ZipOutputStream(new BufferedOutputStream(
					new FileOutputStream(zipFileName)));

			// 压缩文件
			handleDir(zipDir, zipDir.getParent().length() + 1, zipOut);

			zipOut.close();

			return new File(zipFileName);
		} catch (IOException e) {
			logger.error(e);
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 由doZip调用,递归完成目录文件读取
	 * @param dir:(需要)压缩的文件夹(File 类型)
	 * @param len:一个参数(记录压缩文件夹的parent路径的长度)
	 * @param zipOut:需要压缩进的压缩文件
	 * @throws IOException:如果出错,会抛出IOE异常
	 */
	private void handleDir(File dir, int len, ZipOutputStream zipOut)
			throws IOException {
		FileInputStream fileIn = null;
		File[] files = dir.listFiles();

		if (files != null) {
			if (files.length > 0) { // 如果目录不为空,则分别处理目录和文件.
				for (File fileName : files) {

					if (fileName.isDirectory()) {
						handleDir(fileName, len, zipOut);

					} else {
						fileIn = new FileInputStream(fileName);

						zipOut.putNextEntry(new ZipEntry(fileName.getPath()
								.substring(len).replaceAll("\\\\", "/")));

						while ((readedBytes = fileIn.read(buf)) > 0) {
							zipOut.write(buf, 0, readedBytes);
						}
						zipOut.closeEntry();
					}
				}
			} else { // 如果目录为空,则单独创建之.
				zipOut.putNextEntry(new ZipEntry(dir.getPath().substring(len)
						+ "/"));
				zipOut.closeEntry();
			}
		} else {// 如果是一个单独的文件
			fileIn = new FileInputStream(dir);

			zipOut.putNextEntry(new ZipEntry(dir.getPath().substring(len)));

			while ((readedBytes = fileIn.read(buf)) > 0) {
				zipOut.write(buf, 0, readedBytes);
			}
			zipOut.closeEntry();
		}
	}

	/**
	 * 解压指定zip文件
	 * @param unZipfileName:需要解压的zip文件路径
	 * @param unZipPath:文件解压的路径,该路径可以为null,null表示解压到原文件的同级目录
	 */
	public boolean unZip(String unZipfileName, String unZipPath) {// unZipfileName需要解压的zip文件名
		FileOutputStream fileOut = null;
		InputStream inputStream = null;
		File file = null;

		if (unZipPath == null) {
			unZipPath = new File(unZipfileName).getParent();
			// System.out.println("1 -> " + unZipPath);

			if (!(unZipPath.substring(unZipPath.length()).endsWith("/") || unZipPath
					.substring(unZipPath.length()).endsWith("\\"))) {
				unZipPath += "/";
			}

		} else {
			unZipPath = new File(unZipPath).getPath() + "/";
		}

		try {
			zipFile = new ZipFile(unZipfileName);

			for (Enumeration<?> entries = zipFile.getEntries(); entries
					.hasMoreElements();) {
				ZipEntry entry = (ZipEntry) entries.nextElement();
				int iTEMP = entry.getName().indexOf("/") + 1;

				file = new File(unZipPath
						+ entry.getName().substring(iTEMP,
								entry.getName().length()));

				if (entry.isDirectory()) {
					file.mkdirs();
				} else {
					// 如果指定文件的目录不存在,则创建之.
					File parent = file.getParentFile();
					if (!parent.exists()) {
						parent.mkdirs();
					}

					inputStream = zipFile.getInputStream(entry);

					fileOut = new FileOutputStream(file);
					while ((this.readedBytes = inputStream.read(this.buf)) > 0) {
						fileOut.write(this.buf, 0, this.readedBytes);
					}
					fileOut.close();

					inputStream.close();
				}
			}
			this.zipFile.close();
			return true;
		} catch (IOException ioe) {
			logger.error(ioe);
			ioe.printStackTrace();
			return false;
		}
	}
 

 

  • ant.rar (913.4 KB)
  • 下载次数: 86
分享到:
评论

相关推荐

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

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    java后台批量下载文件并压缩成zip下载的方法

    "&lt;/td&gt;&lt;td&gt;" + rows[i].F_TX_NAME + "&lt;/td&gt;&lt;td&gt;" + rows[i].F_STUS + "&lt;/td&gt;&lt;td&gt;" + rows[i].F_DEV_ID + "&lt;/td&gt;&lt;td&gt;" + rows[i].F_SVR_CODE + "&lt;/td&gt;&lt;td&gt;" + rows[i].F_BRNO + "&lt;/td&gt;&lt;td&gt;" + rows[i].F_TIME + "&lt;/td...

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    在Java编程中,处理文件和压缩包操作是常见的任务,特别是在软件开发和数据传输中。本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,...

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

    * @param isCreateDir 是否在压缩文件里创建目录,仅在压缩文件为目录时有效.&lt;br /&gt; * 如果为false,将直接压缩目录下文件到压缩文件. * @param passwd 压缩使用的密码 * @return 最终的压缩文件存放的绝对路径,...

    java压缩文件,zip打包

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

    jacob-1.18.zip + jacob-1.19.zip + jacob-1.20.zip 最新版本(包含dll文件)

    1.将jacob-1.18.zip下载解压,在文件夹中找到jacob-1.18-x64.dll,jacob-1.18-x86.dll,jacob.jar 2.通过 pom.xml 新增 &lt;dependency&gt; &lt;groupId&gt;com.hynnet&lt;/groupId&gt; &lt;artifactId&gt;jacob&lt;/artifactId&gt; &lt;version&gt;...

    ZipUtil文件压缩工具类

    在Java编程语言中,`ZipUtil`文件压缩工具类是一个非常实用的工具,它利用了Java内置的`java.util.zip`包中的`ZipEntry`类来实现文件或目录的压缩功能。`ZipUtil`通常被设计为一个静态类,提供一系列静态方法,使得...

    VB编程资源大全(源码 网络)

    (73KB)&lt;br&gt;121,i012.zip&lt;br&gt;如何在vb中调用i/o口的例子(10KB)&lt;br&gt;122,i011.zip&lt;br&gt;演示连接/断开network(3KB)&lt;br&gt;123,i010.zip&lt;br&gt;chat程序例子(12KB)&lt;br&gt;124,i009.zip&lt;br&gt;简单的邮件发送例子 (13KB)&lt;br&gt;125,i008....

    java 文件夹打包 zip

    在Java编程环境中,打包文件或文件夹是一项常见的任务,特别是在软件开发过程中,我们需要将源代码、资源文件等打包成一个可分发的格式,如.zip。在这个场景中,我们使用了Java来实现文件夹的打包功能,并且依赖了...

    Linux下编译使用QuaZIP

    QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库.适用于多种平台,利用它可以很方便的将单个或多个文件打包为zip文件,且打包后...&lt;4&gt; 调用Quazip压缩文件夹和解压zip文件的例子源码(完整的项目源码)

    java中将多个excel打包成zip文件下载.rar

    在Java编程环境中,将多个Excel文件打包成ZIP文件并实现下载功能是一项常见的需求,尤其是在数据导出或批量处理场景中。下面将详细讲解这个过程涉及的主要知识点。 首先,我们需要了解Java中的`java.util.zip`包,...

    61种flash 字体特效源文件下载

    光线文字(33KB)&lt;END&gt; 2,hrwz.zip 环绕旋转字(5KB)&lt;END&gt; 3,kzfwz.zip 空中飞舞字(6KB)&lt;END&gt; 4,sdwz.zip 闪电文字(6KB)&lt;END&gt; 5,sjlz2.zip 数据流字(8KB)&lt;END&gt; 6,twfz1.zip 天外飞字1(5KB)&lt;END&gt; 7,twfz2.zip...

    Visual C++ 编程资源大全(源码 控件)

    1,WINAPI_OCX.zip&lt;br&gt;封装了部分Windows API的控件(92KB)&lt;END&gt;&lt;br&gt;2,HeaderCtrl.zip&lt;br&gt;多行标题的CListCtrl(19KB)&lt;END&gt;&lt;br&gt;3,RoundBut.zip&lt;br&gt;你需要圆形的按钮吗?这个类已经替你做好了,它可是有正常、平面、下推...

    java 实现指定目录下的文件打包zip格式 并指定存放zip包

    java 实现指定目录下的文件打包zip格式 并指定存放zip包

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

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

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

    此外,`ZipUtil`类可能还包含其他实用功能,比如解压缩ZIP文件,检查ZIP文件是否存在中文乱码,或者提供配置选项以自定义压缩级别、是否保留原文件的最后修改时间等。 总之,`ZipUtil`文件压缩工具类通过结合`Zip...

    JAVA实现对文件夹“加密码压缩”

    (压缩后为Zip文件) 无需导入任何个人jar包 压缩后效果等同于用winrar给压缩包加密码 时间紧迫,暂时存在中文文件夹名称乱码问题 不影响文件夹内各类型文件内容 实现方法见功能说明txt文档,只需传入文件夹路径...

    使用Java向服务器上传文件压缩包并实现解压缩

    在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...

    java反编译工具jad 1.5.8g(可以反编译jdk1.5,1.6)

    Installation.&lt;br&gt;&lt;br&gt;Unzip jad.zip file into any appropriate directory on your hard drive.&lt;br&gt;This will create two files:&lt;br&gt;&lt;br&gt; - an executable file named 'jad.exe' (Windows *)&lt;br&gt; or 'jad' (*n*x)...

    JAVA 从压缩包中提取文件

    ### JAVA 从压缩包中提取文件 #### 一、项目简介 本项目旨在演示如何使用Java编程语言从ZIP格式的压缩文件中提取文件并显示其名称。ZIP是一种广泛使用的文件压缩与存档格式,常用于数据备份和网络传输中。在实际...

Global site tag (gtag.js) - Google Analytics