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到网上下载。
相关推荐
使用该jar包可对zip,rar,7z进行压缩和解压操作 使用该jar包可对zip,rar,7z进行压缩和解压操作
java项目中常使用到的工具类:zip压缩解压缩、rar解压(有密码的文件)、gz解压、FTP上传与下载
NULL 博文链接:https://hogwartsrow.iteye.com/blog/1853355
在使用Java对ZIP压缩文件进行解压的方式中有两种,一种是使用apache提供的ant.jar工具包,但是如果ZIP文件中含有中文名称的文件,在解压后,文件名将出现乱码,另一种是使用Java自身JDK中java.util.zip包下工具类,...
学习需要下载了一些视频教程的RAR包,几百个包手工解压很不方便,JDK的工具类只能解压ZIP包,于是动手写了个小程序,批量从RAR包中解压*.avi格式的文件。代码很简单,所依赖的JAR包全部提供,需要的可以下,随手写的...
7-Zip is free software with open source.The most of the code is under the GNU LGPL license
7zip支持我们所能见到的绝大部分格式压缩包(包括zip、rar、gz、tar、bz2……)的解压,同时能将数据压缩成zip、7z、tar等格式,完全能满足绝大多数场合的数据压缩解压需要。但与常用但需要注册的winrar、winzip之类...
里面包含libp7zip.so文件,通过java工具类调用该so文件实现解压和压缩,libp7zip.so可解压 7z,zip,rar等市面大部分压缩文件,本应用默认设置了 7z ,自己可在源码修改解压类型。里面有说明文档,已搭建好 java调用...
应用SharpCompress0.22开源包进行文件的解压缩(zip,rar文件),已处理中文乱码问题,例子很基础.源码环境 VS2017 15.3 .
详解java解压缩zip和rar的工具类使用教程直接上代码 package decompress; import java.io.File; import java.io.FileOutputStream; import org.apache.tools.ant.Project; import org.apache.tools.ant...
这个类型实现了java语法解压压缩包的功能,可以直接导入项目调用
使用Java实现文件的压缩和解压的工具类,包括zip、tar、tar.gz、gz、rar等结尾的工具类
独立打包,保证可解压,内含大量...XML文件读取及管理工具VC++源码 .rar 播放器 MM.zip 超清晰播放器源代码.zip 超旋的音乐播放器.rar 穿还原的下载者 C++源码.rar 从dll中动态装载类的源程序.rar VC满屏开满玫瑰花.zip
ssh工具MobaXterm,可视化目录,一键粘贴等……
独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 本包内容: 深入解析ATL(第二版)源代码资源大小.zip ...写日志log的类.zip 阳历阴历转换.rar 一个轻量级网络通信开发库源码.zip
java中使用ZipEntry对文件目录下的所有文件进行压缩,已解决中文乱码问题,亲测可用,请放心下载。
VC++ ini文件读写操作类实例.rar VC+++暴风影音(Media+Player+Classic)源码.zip VC++版源代码统计工具 .rar VC++遍历文件夹自动生成目录树.rar vc++动态链接库编程之DLL典型实例源代码下载.rar vc++动态链接库编程...
使用spring boot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4,mp3以及众多类文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、...
Ashampoo ZIP是一款免费的文件压缩解压工具,可加密文件,加密文件和文件夹为数个不同的安全格式,解密文件从所有支持的格式解密多个文件,虚拟ISO驱动器能够挂载ISO镜像到虚拟驱动器,捕捉光盘到ISO。ZIP脚本通过...
《ZArchiver解压工具》是一款系统安全类软件 强大的压缩/解压工具,能够解压的文件类型非常广泛。 使用ZArchiver你可以: -创建格式为:7z (7zip),zip,bzip2 (bz2),gzip (gz),XZ,tar的压缩文件; -解压缩格式为...