package com.ylink.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expand; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import de.innosystec.unrar.Archive; import de.innosystec.unrar.rarfile.FileHeader; /** * 解压zip包或者rar包工具类 * */ public class DeCompressUtil { private static final int BUFFEREDSIZE = 1024; /** * 解压zip的内容到指定的目录下,可以处理其文件夹下包含子文件夹的情况 * @param zipFilename * 要解压的zip包文件 * @param destDir * 解压后存放的目录 * @throws Exception */ public synchronized static void unzip(String zipFilename, String destDir) throws Exception { try { File outFile = new File(destDir); if (!outFile.exists()) { outFile.mkdirs(); } File zipF = new File(zipFilename); if ((!zipF.exists()) && (zipF.length() <= 0 )) { throw new Exception( "要解压的文件不存在!" ); } ZipFile zipFile = new ZipFile(zipFilename,"GB2312");//处理中文乱码问题 Enumeration<?> en = zipFile.getEntries(); ZipEntry zipEntry = null; while (en.hasMoreElements()) { zipEntry = (ZipEntry) en.nextElement(); if (zipEntry.isDirectory()) { // mkdir directory String dirName = zipEntry.getName(); dirName = dirName.substring(0, dirName.length() - 1); File f = new File(outFile.getPath() + File.separator + dirName); f.mkdirs(); } else { //unzip file String strFilePath = outFile.getPath() + File.separator + zipEntry.getName(); File f = new File(strFilePath); //////begin///// //判断文件不存在的话,就创建该文件所在文件夹的目录 if (!f.exists()) { String[] arrFolderName = zipEntry.getName().split("/"); String strRealFolder = ""; for (int i = 0; i < (arrFolderName.length - 1); i++) { strRealFolder += arrFolderName[i] + File.separator; } strRealFolder = outFile.getPath() + File.separator + strRealFolder; File tempDir = new File(strRealFolder); //此处使用.mkdirs()方法,而不能用.mkdir() tempDir.mkdirs(); } //////end/// f.createNewFile(); InputStream in = zipFile.getInputStream(zipEntry); FileOutputStream out = new FileOutputStream(f); int c; byte[] by = new byte[BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } //out.flush(); out.close(); in.close(); } } } catch (Exception e) { e.printStackTrace(); throw e; } } /** * 解压zip格式压缩包 * 对应的是ant.jar */ @SuppressWarnings("unused") private static void unzip2(String sourceZip,String destDir) throws Exception{ try{ Project p = new Project(); Expand e = new Expand(); e.setProject(p); e.setSrc(new File(sourceZip)); e.setOverwrite(false); e.setDest(new File(destDir)); /* ant下的zip工具默认压缩编码为UTF-8编码, 而winRAR软件压缩是用的windows默认的GBK或者GB2312编码 所以解压缩时要制定编码格式 */ e.setEncoding("gbk"); e.execute(); }catch(Exception e){ throw e; } } /** * 解压rar格式压缩包。 * 对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar */ private static void unrar(String sourceRar,String destDir) throws Exception{ Archive a = null; FileOutputStream fos = null; try{ a = new Archive(new File(sourceRar)); FileHeader fh = a.nextFileHeader(); while(fh!=null){ if(!fh.isDirectory()){ //1 根据不同的操作系统拿到相应的 destDirName 和 destFileName String compressFileName = ""; if(fh.isUnicode()){//如果存在中文名,需要使用getFileNameW()方法,解决中文乱码问题 compressFileName = fh.getFileNameW().trim(); }else{ compressFileName = fh.getFileNameString().trim(); } String destFileName = ""; String destDirName = ""; //非windows系统 if(File.separator.equals("/")){ destFileName = destDir + 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(); } //3解压缩文件 fos = new FileOutputStream(new File(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();} } } } /** * 解压缩 */ public static void deCompress(String sourceFile,String destDir) throws Exception{ //保证文件夹路径最后是"/"或者"\" char lastChar = destDir.charAt(destDir.length()-1); if(lastChar != '/' && lastChar != '\\'){ destDir += File.separator; } //根据类型,进行相应的解压缩 String type = sourceFile.substring(sourceFile.lastIndexOf(".")+1).toLowerCase(); if("zip".equals(type)){ DeCompressUtil.unzip(sourceFile, destDir); //DeCompressUtil.unzip2(sourceFile, destDir); }else if("rar".equals(type)){ DeCompressUtil.unrar(sourceFile, destDir); }else{ throw new Exception("只支持zip和rar格式的压缩包!"); } } public static void main(String[] args) throws Exception { try { //DeCompressUtil.deCompress("E:/软件安装包/jetty-6.1.14.zip", "E:/软件安装包/jetty"); DeCompressUtil.deCompress("E:/软件安装包/项目/ydsys.rar", "E:/软件安装包/项目"); } catch (IOException e) { e.printStackTrace(); } } }
最近要搞一个java解压zip或者rar的功能,网上搜索了一下,在此记录,相关jar到网上下载。
相关推荐
使用`java.util.zip`包中的`ZipInputStream`和`ZipEntry`类,可以读取并解压ZIP文件。以下是一个基本的解压流程: - 创建`ZipInputStream`实例,传入文件输入流。 - 循环遍历`ZipInputStream`的`ZipEntry`,获取...
在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...
以下是一个简单的示例,展示如何使用Java标准库解压ZIP文件: ```java import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import ...
这个压缩包"zip+rar两种解压jar支持包"显然包含了支持在Java代码中解压ZIP和RAR格式的.jar文件的工具或库。这意味着开发者无需离开他们的编程环境,就可以直接在代码中解压这些文件,这对于测试、调试和部署过程中的...
首先,对于ZIP格式的文件,Java标准库提供了`java.util.zip`包,其中的`ZipInputStream`和`ZipOutputStream`类可以用来读取和写入ZIP文件。以下是解压缩ZIP文件的基本步骤: 1. 创建一个`FileInputStream`对象,...
本文将详细介绍标题和描述中提到的几个关键知识点:Java中的zip、rar(包括处理带密码的RAR文件)、gz压缩,以及FTP工具类的使用。 1. **Java ZIP压缩与解压缩**: Java内置的`java.util.zip`包提供了处理ZIP文件...
本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...
"RAR解压工具"指的是能够处理RAR文件的软件,这类工具不仅能够对RAR文件进行解压缩,还可能支持其他压缩格式,如ZIP、7Z等。 对于描述中提到的"加密的RAR文件也能解压",这意味着该解压工具具有处理密码保护的RAR...
img解压工具能够将这类文件解析并写入到合适的存储介质上,如SD卡或内部存储。img文件的处理通常包括: 1. 验证img文件:检查文件的校验和,确认其有效性。 2. 打开img文件:使用特定工具(如dd命令或img解压软件)...
同时,7-Zip还支持解压如RAR、ZIP、7Z、GZ、BZ2、XZ等众多常见压缩格式,几乎涵盖了日常使用的所有压缩需求。 除了强大的压缩功能,7-Zip的用户界面简洁易用,无论是初学者还是经验丰富的用户都能快速上手。在...
首先,让我们了解一下如何使用ICSharpCode.SharpZipLib来解压ZIP文件。这个过程通常包括以下步骤: 1. **加载ZIP文件**:通过`FileStream`打开ZIP文件,然后使用`ZipFile`类的构造函数加载ZIP文件内容。 ```csharp...
以下是关于如何在VB中使用FSO和相关工具进行ZIP压缩和解压的详细知识点: 1. **引入相关组件**:首先,你需要在VB项目中引用“Microsoft Scripting Runtime”和“Microsoft ActiveX Data Objects”库。这两个库提供...
在IT行业中,我们经常需要处理各种类型的压缩文件,如ZIP、RAR等。这些文件通常用于存储和传输大量的数据,以减少文件的体积。在Java环境中,有一种高效且强大的工具可以帮助我们进行压缩和解压缩操作,那就是Apache...
总之,"Wince下rar/zip文件压缩解压源码"涵盖了在嵌入式系统中处理RAR和ZIP文件的核心技术,包括文件压缩、解压缩算法的实现,以及读取和解析压缩文件的结构。开发者可以通过这个源码学习到如何在资源受限的环境中...
在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,...
该工具的出现,旨在简化这一过程,让用户能够直接在线解压ZIP压缩包,提高工作效率。 首先,我们要理解什么是ZIP格式。ZIP是一种广泛使用的文件压缩格式,由Phil Katz在1989年创建。它允许将多个文件和文件夹打包到...
- **执行系统命令**:使用Java的Runtime类或者ProcessBuilder类,可以执行系统命令来调用7-Zip的CLI,从而在Java程序中实现压缩和解压缩操作。 4. **大数据包处理** - **分卷压缩**:7-Zip支持分卷压缩,这意味着...
以下是一些关键的C#代码片段,用于批量解压ZIP文件: ```csharp using System.IO; using System.IO.Compression; void BatchUnzip(string sourceFolderPath, string destinationFolderPath) { if (!Directory....
Java 1.7以上版本的通用解压工具是一款适用于Java平台的软件,它能够处理多种压缩格式,如RAR、ZIP、TAR等,为开发者提供了一种方便的方式来处理压缩文件。这款工具通常由程序员用于自动化任务,例如在应用程序中...
学习需要下载了一些视频教程的RAR包,几百个包手工解压很不方便,JDK的工具类只能解压ZIP包,于是动手写了个小程序,批量从RAR包中解压*.avi格式的文件。代码很简单,所依赖的JAR包全部提供,需要的可以下,随手写的...