`

<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文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    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;...

    java 文件夹打包 zip

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

    Java代码 可以压缩文件夹到指定目录和指定名称,将文件或者文件夹中的文件转成base64格式

    在Java编程语言中,压缩文件夹到指定目录和指定名称是一项常见的任务,这通常涉及到对文件系统的操作和使用压缩库。Java提供了多种方法来实现这一功能,比如使用内置的`java.util.zip`包或者第三方库如Apache ...

    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...

    java加密解密zip压缩包

    在Java编程环境中,处理文件的压缩与解压缩是常见的任务,而涉及到安全性,加密和解密就显得尤为重要。本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文...

    Linux下编译使用QuaZIP

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

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

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

    java压缩批量文件打包

    Java标准库提供了一个名为`java.util.zip`的包,该包包含了一系列类,如ZipOutputStream和GZIPOutputStream,可以用来创建ZIP和GZIP格式的压缩文件。但是,如果需要处理更复杂的任务,如批量打包,Ant则更为合适。 ...

    jquery打包,生成并下载zip文件

    - **创建下载链接**:通过创建一个隐藏的`&lt;a&gt;`标签,设置其`href`属性为ZIP文件的Blob URL,并触发点击事件,从而触发文件下载。 - **下载提示**:在用户完成文件选择并开始打包后,可以使用jQuery展示下载提示...

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

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

    Java带密码解压缩RAR压缩包(内附代码)

    你需要将`rarFilePath`替换为RAR文件的实际路径,`password`替换为RAR文件的密码,`outputDirectory`替换为你希望解压缩文件的目标目录。 为了在Windows和Linux上都能运行这段代码,确保你的项目构建是跨平台的,...

    java获取压缩文件的名称并解压

    在Java编程中,处理压缩文件,如ZIP格式的文件,是一项常见的任务。本文将深入探讨如何使用Java来获取ZIP文件的名称以及如何高效地解压缩这些文件,特别是通过多线程来提高性能。 首先,我们需要引入Java的内置库`...

    java实现Ftp批量下载文件及解压

    以下是一个简单示例,将一个目录压缩为.zip文件: ```java File dirToCompress = new File("/path/to/directory"); FileOutputStream fos = new FileOutputStream(zipFilePath); ZipOutputStream zos = new ...

    Java处理zip压缩文件

    在Java编程环境中,处理zip压缩文件是一项常见的任务,特别是在数据传输、备份或者打包应用程序时。本文将详细讲解如何使用zip4j库来实现对单个文件或多个文件的压缩、加密压缩以及解密压缩包的操作。 首先,zip4j...

    如何在netbeans下把java工程打包成jar包

    * 使用`&lt;zip&gt;`元素来创建一个ZIP文件 * 使用`&lt;manifest&gt;`元素来定义JAR文件的清单 * 使用`&lt;attribute&gt;`元素来定义JAR文件的属性 * 使用`&lt;delete&gt;`元素来删除文件 * 使用`&lt;mkdir&gt;`元素来创建一个目录 这些知识点都是...

    java打包jar、第三方jar包、制作成.bat批处理

    1. **打包Java项目为JAR文件** 打包Java项目通常使用Maven或Gradle等构建工具。在Maven中,可以在pom.xml文件中配置maven-jar-plugin插件。以下是一个基本配置示例: ```xml &lt;build&gt; &lt;plugins&gt; &lt;plugin&gt; ...

    pom.zip_java maven_pom mainfest java_pom manifest 标签_pom 文件 mani

    在`pom.zip`这个压缩包中,`pom.xml`文件是核心组件,它描述了项目的构建过程、依赖库以及相关的元数据。 标题中的“pom.zip_java maven_pom mainfest java_pom manifest 标签_pom 文件 mani”暗示了我们讨论的主题...

Global site tag (gtag.js) - Google Analytics