/** * 解压缩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实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...
在Java编程环境中,处理压缩文件如RAR和ZIP是常见的任务,尤其在数据传输、存储优化以及软件部署等场景中。本文将深入探讨如何使用Java来解压RAR和ZIP格式的文件,提供必要的理论知识和实战代码示例。 首先,我们要...
在Java编程环境中,解压缩ZIP或RAR格式的文件是一项常见的任务,这主要涉及到I/O流、文件操作以及压缩和解压缩库的使用。本篇将深入讲解如何在Java中实现这个功能,同时会介绍一些相关的工具和源码。 首先,对于ZIP...
在Java编程环境中,解压不同类型的压缩文件,如RAR5、Zip和7z,是一项常见的任务。为了实现这一功能,我们需要使用特定的库,因为Java标准库并不直接支持RAR5和7z格式。这里我们将详细探讨如何使用Java来处理这些...
在Java编程环境中,批量解压带密码...总的来说,Java批量解压带密码的RAR或ZIP文件涉及了文件流操作、压缩格式理解、第三方库的使用以及版权保护等多个知识点。通过合理运用这些知识,可以构建出高效、安全的解压工具。
在Java编程环境中,上传并处理ZIP和RAR压缩文件是一项常见的任务,特别是在文件传输、数据存储以及备份场景下。本文将详细讲解如何实现这个功能,包括文件上传、实时进度跟踪、指定解压路径以及解压过程。 首先,让...
在Java中,可以使用`java.util.zip.GZIPOutputStream`来压缩数据,`java.util.zip.GZIPInputStream`来解压缩。`GZUtil.java`可能包含了压缩和解压缩GZ文件的相关方法。 4. **FTP工具类**: FTP(文件传输协议)常...
沙漏哦2022-09-16 16:00:57原证Java解压缩文件,尤其对于Rar5.0版本的解压实现 项目描述 junrar已经不再支持Rar5版本的压缩文件。sevenzipjbinding对于Rar5压缩包的解压是调用本地7z软件进行解压的,如果本机环境...
在提供的代码中,可以看到使用了`de.innosystec.unrar.Archive`类来解压缩RAR文件,但请注意,这个库可能需要额外的授权。 ```java Archive archive = new Archive(new File("input.rar")); archive.extractAll(...
### Java对ZIP、RAR文件的压缩与解压缩技术解析 #### 概述 在实际开发过程中,文件的压缩与解压缩是一项非常常见的需求。本文将详细介绍如何使用Java语言实现ZIP和RAR格式文件的压缩与解压缩操作。文章通过具体的...
JavaAndroid可用的ziprar解压缩代码实现提供了这样的功能,但请注意,由于文件数量多,可能并非所有代码都能直接运行,需要根据具体情况进行调试和适配。 在Android开发中,我们可以利用Java内置的`java.util.zip`...
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
接下来,我们讨论如何解压缩ZIP文件。解压缩通常包括以下步骤: 1. **创建`ZipInputStream`**:同样,你需要创建一个`ZipInputStream`,它从ZIP文件的输入流读取。 ```java FileInputStream fis = new ...
Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...
我这个资源是也是从网上下的,下下来之后在单个测试类里面解压rar是没问题的,但是在Action里面调就抛java.lang.OutOfMemoryError: Java heap space,所以自己换了种解压rar的方法,以前的方法注释掉了。action里面...
首先,我们需要一个库来处理RAR格式,因为Java标准库并不直接支持RAR解压缩。在这种情况下,我们可以使用`java-unrar`库,这是一个基于GNU Crypto的Java RAR工具包。文件名`java-unrar_gnu-crypto`可能就是这个库的...
这个示例展示了如何使用Apache Commons Compress库进行.zip文件的解压缩和压缩操作。请注意,对于.rar和.7z文件,你需要根据具体库的文档进行相应调整。 总的来说,Java处理.zip、.rar和.7z文件时,需依赖第三方库...
在这个场景中,我们将深入探讨如何使用这个包来解压缩和压缩ZIP格式的文件。`java.util.zip` 包包含几个关键类,如 `ZipInputStream`, `ZipOutputStream`, `ZipEntry` 等,它们共同协作以完成ZIP文件的读写操作。 ...
在Java编程环境中,解压ZIP和RAR文件是常见的任务,特别是在处理数据传输、备份或集成系统时。本文将深入探讨如何使用Java实现这一功能,并提供详细的步骤和代码示例。 首先,我们来看如何使用Java来解压ZIP文件。...