`
征途2010
  • 浏览: 248008 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java解压rar以及zip

    博客分类:
  • java
阅读更多
/**
	 * 解压缩zip包
	 * 
	 * @param zipFilePath zip文件路径
	 * @param targetPath 解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下
	 * @throws IOException
	 * @author yayagepei
	 * @date 2008-9-28
	 */
	public String unZip(String zipFilePath, String targetPath) throws IOException {
		OutputStream os = null;
		InputStream is = null;
		ZipFile zipFile = null;
		String resultPath = null;
		try {
			zipFile = new ZipFile(zipFilePath,"GBK");
			String directoryPath = "";
			if (null == targetPath || "".equals(targetPath)) {
				directoryPath = zipFilePath.substring(0, zipFilePath.lastIndexOf("."));
			} else {
				directoryPath = targetPath;
			}
			Enumeration<ZipEntry> entryEnum = zipFile.getEntries();
			if (null != entryEnum) {
				ZipEntry zipEntry = null;
				while (entryEnum.hasMoreElements()) {
					zipEntry = (ZipEntry) entryEnum.nextElement();
					if (zipEntry.isDirectory()) {
						continue;
					}
					if (zipEntry.getSize() > 0) {
						// 文件
						File targetFile = buildFile(directoryPath + File.separator
								+ zipEntry.getName(), false);
						if (zipEntry.getName().contains("webapps")
								&& "index.html".equals(targetFile.getName())) {
							resultPath = targetFile.getAbsolutePath();
						}
						os = new BufferedOutputStream(new FileOutputStream(targetFile));
						is = zipFile.getInputStream(zipEntry);
						byte[] buffer = new byte[4096];
						int readLen = 0;
						while ((readLen = is.read(buffer, 0, 4096)) >= 0) {
							os.write(buffer, 0, readLen);
						}

						os.flush();
						os.close();
					} else {
					}
				}
			}
		} catch (IOException ex) {
			throw ex;
		} finally {
			if (null != zipFile) {
				zipFile = null;
			}
			if (null != is) {
				is.close();
			}
			if (null != os) {
				os.close();
			}
		}
		return resultPath;
	}

	/**
	 * 解压rar格式压缩包。 对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar
	 */
	public String unrar(String sourceRar, String destDir) throws Exception {
		String resultPath = null;
		Archive a = null;
		FileOutputStream fos = null;
		try {
			a = new Archive(new File(sourceRar));
			if (null == destDir || "".equals(destDir)) {
				destDir = a.getFile().getParentFile().getAbsolutePath();
			} 
			FileHeader fh = a.nextFileHeader();
			while (fh != null) {
				if (!fh.isDirectory()) {
					// 1 根据不同的操作系统拿到相应的 destDirName 和 destFileName
					String compressFileName = "";
					if (fh.isUnicode()) {
						compressFileName = fh.getFileNameW().trim();
					} else {
						compressFileName = fh.getFileNameString().trim();
					}
					String destFileName = "";
					String destDirName = "";
					// 非windows系统
					if (File.separator.equals("/")) {
						destFileName = destDir +File.separator+ compressFileName.replaceAll("\\\\", "/");
						destDirName = destFileName.substring(0, destFileName.lastIndexOf("/"));
						// windows系统
					} else {
						destFileName = destDir + compressFileName.replaceAll("/", "\\\\");
						destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\"));
					}

					// 2创建文件夹
					File dir = new File(destDirName);
					if (!dir.exists() || !dir.isDirectory()) {
						dir.mkdirs();
					}
					File destFile=new File(destFileName);
					// 3解压缩文件
					fos = new FileOutputStream(destFile);
					if ("index.html".equals(destFile.getName())) {
						resultPath = destFileName;
					}
					a.extractFile(fh, fos);
					fos.close();
					fos = null;
				}
				fh = a.nextFileHeader();
			}
			a.close();
			a = null;
		} catch (Exception e) {
			throw e;
		} finally {
			if (fos != null) {
				try {
					fos.close();
					fos = null;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (a != null) {
				try {
					a.close();
					a = null;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return resultPath;
	}

	/**
	 * 生产文件 如果文件所在路径不存在则生成路径
	 * 
	 * @param fileName 文件名 带路径
	 * @param isDirectory 是否为路径
	 * @return
	 * @author yayagepei
	 * @date 2008-8-27
	 */
	public File buildFile(String fileName, boolean isDirectory) {
		File target = new File(fileName);
		if (isDirectory) {
			target.mkdirs();
		} else {
			if (!target.getParentFile().exists()) {
				target.getParentFile().mkdirs();
				if (target.exists()) {
					target.delete();
				}
				target = new File(target.getAbsolutePath());
			}
		}
		return target;
	}

 

分享到:
评论

相关推荐

    java解压缩rar以及zip格式文件

    java解压缩 rar 以及 zip 格式文件

    java实现的解压与压缩 zip和rar类型的

    本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...

    java rar和zip解压

    在Java编程环境中,处理压缩文件如RAR和ZIP是常见的任务,尤其在数据传输、存储优化以及软件部署等场景中。本文将深入探讨如何使用Java来解压RAR和ZIP格式的文件,提供必要的理论知识和实战代码示例。 首先,我们要...

    JAVA解压缩ZIP或RAR格式的文件

    在Java编程环境中,解压缩ZIP或RAR格式的文件是一项常见的任务,这主要涉及到I/O流、文件操作以及压缩和解压缩库的使用。本篇将深入讲解如何在Java中实现这个功能,同时会介绍一些相关的工具和源码。 首先,对于ZIP...

    Java通用解压代码(RAR5,Zip,7Z)

    在Java编程环境中,解压不同类型的压缩文件,如RAR5、Zip和7z,是一项常见的任务。为了实现这一功能,我们需要使用特定的库,因为Java标准库并不直接支持RAR5和7z格式。这里我们将详细探讨如何使用Java来处理这些...

    java实现批量解压带密码的 rar or zip 文件

    在Java编程环境中,批量解压带密码...总的来说,Java批量解压带密码的RAR或ZIP文件涉及了文件流操作、压缩格式理解、第三方库的使用以及版权保护等多个知识点。通过合理运用这些知识,可以构建出高效、安全的解压工具。

    JAVA 上传ZIP,RAR文件并解压

    在Java编程环境中,上传并处理ZIP和RAR压缩文件是一项常见的任务,特别是在文件传输、数据存储以及备份场景下。本文将详细讲解如何实现这个功能,包括文件上传、实时进度跟踪、指定解压路径以及解压过程。 首先,让...

    java zip rar(区分有无密码的RAR文件) gz ftp工具类

    在Java中,可以使用`java.util.zip.GZIPOutputStream`来压缩数据,`java.util.zip.GZIPInputStream`来解压缩。`GZUtil.java`可能包含了压缩和解压缩GZ文件的相关方法。 4. **FTP工具类**: FTP(文件传输协议)常...

    Java解压缩文件,尤其对于Rar5.0版本的解压实现.zip

    沙漏哦2022-09-16 16:00:57原证Java解压缩文件,尤其对于Rar5.0版本的解压实现 项目描述 junrar已经不再支持Rar5版本的压缩文件。sevenzipjbinding对于Rar5压缩包的解压是调用本地7z软件进行解压的,如果本机环境...

    java 压缩/解压 .zip/.rar/.tar 文件

    在提供的代码中,可以看到使用了`de.innosystec.unrar.Archive`类来解压缩RAR文件,但请注意,这个库可能需要额外的授权。 ```java Archive archive = new Archive(new File("input.rar")); archive.extractAll(...

    java对zip、rar文件的压缩和解压缩

    ### Java对ZIP、RAR文件的压缩与解压缩技术解析 #### 概述 在实际开发过程中,文件的压缩与解压缩是一项非常常见的需求。本文将详细介绍如何使用Java语言实现ZIP和RAR格式文件的压缩与解压缩操作。文章通过具体的...

    javaandroid可用的ziprar解压缩代码实现.rar

    JavaAndroid可用的ziprar解压缩代码实现提供了这样的功能,但请注意,由于文件数量多,可能并非所有代码都能直接运行,需要根据具体情况进行调试和适配。 在Android开发中,我们可以利用Java内置的`java.util.zip`...

    java 读取ZIP和RAR压缩包的目录结构

    java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    (JAVA)利用Java实现zip压缩.解压缩.rar_decompress rar java_zip 压缩

    接下来,我们讨论如何解压缩ZIP文件。解压缩通常包括以下步骤: 1. **创建`ZipInputStream`**:同样,你需要创建一个`ZipInputStream`,它从ZIP文件的输入流读取。 ```java FileInputStream fis = new ...

    java 文件解压rar和zip格式

    我这个资源是也是从网上下的,下下来之后在单个测试类里面解压rar是没问题的,但是在Action里面调就抛java.lang.OutOfMemoryError: Java heap space,所以自己换了种解压rar的方法,以前的方法注释掉了。action里面...

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

    首先,我们需要一个库来处理RAR格式,因为Java标准库并不直接支持RAR解压缩。在这种情况下,我们可以使用`java-unrar`库,这是一个基于GNU Crypto的Java RAR工具包。文件名`java-unrar_gnu-crypto`可能就是这个库的...

    Java解压zip,rar,7z的jar包

    这个示例展示了如何使用Apache Commons Compress库进行.zip文件的解压缩和压缩操作。请注意,对于.rar和.7z文件,你需要根据具体库的文档进行相应调整。 总的来说,Java处理.zip、.rar和.7z文件时,需依赖第三方库...

    java.util.zip 解压缩文件,ZIP格式压缩文件.rar

    在这个场景中,我们将深入探讨如何使用这个包来解压缩和压缩ZIP格式的文件。`java.util.zip` 包包含几个关键类,如 `ZipInputStream`, `ZipOutputStream`, `ZipEntry` 等,它们共同协作以完成ZIP文件的读写操作。 ...

    java 解压zip,rar文件

    在Java编程环境中,解压ZIP和RAR文件是常见的任务,特别是在处理数据传输、备份或集成系统时。本文将深入探讨如何使用Java实现这一功能,并提供详细的步骤和代码示例。 首先,我们来看如何使用Java来解压ZIP文件。...

Global site tag (gtag.js) - Google Analytics