第一种:

public class fileZipUtil {/*** zip文件解压* @param inputFile  待解压文件夹/文件* @param destDirPath  解压路径*/public static void unZipFiles(String inputFile,String destDirPath) throws Exception {File srcFile = new File(inputFile);//获取当前压缩文件// 判断源文件是否存在if (!srcFile.exists()) {throw new Exception(srcFile.getPath() + "所指文件不存在");}ZipFile zipFile = new ZipFile(srcFile, Charset.forName("GBK"));//创建压缩文件对象//开始解压Enumeration<?> entries = zipFile.entries();while (entries.hasMoreElements()) {ZipEntry entry = (ZipEntry) entries.nextElement();// 如果是文件夹,就创建个文件夹if (entry.isDirectory()) {String dirPath = destDirPath + "/" + entry.getName();srcFile.mkdirs();} else {// 如果是文件,就先创建一个文件,然后用io流把内容copy过去File targetFile = new File(destDirPath + "/" + entry.getName());// 保证这个文件的父文件夹必须要存在if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}targetFile.createNewFile();// 将压缩文件内容写入到这个文件中InputStream is = zipFile.getInputStream(entry);FileOutputStream fos = new FileOutputStream(targetFile);int len;byte[] buf = new byte[1024];while ((len = is.read(buf)) != -1) {fos.write(buf, 0, len);}// 关流顺序,先打开的后关闭fos.close();is.close();}}}/*** 解压RAR压缩文件到指定路径* @param rarFile RAR压缩文件* @param dstDir 解压到的文件夹路径*/public static void unRarFile(String rarPath, String dstDir) throws Exception {File dstDiretory = new File(dstDir);if (!dstDiretory.exists()) {dstDiretory.mkdirs();}try {File rarFile= new File(rarPath);Archive archive = new Archive(new FileInputStream(rarFile));List<FileHeader> fileHeaders = archive.getFileHeaders();for (FileHeader fileHeader : fileHeaders) {if (fileHeader.isDirectory()) {String fileName=  fileHeader.getFileNameW();if(!existZH(fileName)){fileName = fileHeader.getFileNameString();}File dir = new File(dstDir + File.separator + fileName);if (!dir.exists()){dir.mkdirs();}} else {String fileName=  fileHeader.getFileNameW().trim();if(!existZH(fileName)){fileName = fileHeader.getFileNameString().trim();}File file = new File(dstDir + File.separator + fileName);try {if (!file.exists()) {if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}file.createNewFile();}FileOutputStream os = new FileOutputStream(file);archive.extractFile(fileHeader, os);os.close();} catch (Exception ex) {throw ex;}}}archive.close();} catch (Exception e) {throw e;}}public static boolean existZH(String str) {String regEx = "[\\u4e00-\\u9fa5]";Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(str);while (m.find()) {return true;}return false;}//使用main方法进行测试public static void main(String[] args) {try {String filepath = "E:\\test\\测试1.rar";String newpath="E:\\test\\zipTest";//获取最后一个.的位置int lastIndexOf = filepath.lastIndexOf(".");//获取文件的后缀名 .jpgString suffix = filepath.substring(lastIndexOf);System.out.println(suffix);if(suffix.equals(".zip")){unZipFiles(filepath,newpath);}else if(suffix.equals(".rar")){unRarFile(filepath,newpath);}} catch (Exception e) {e.printStackTrace();}}}

第二种:

// 获取本地rar
public void unRarByPath() {String rarPath = "D:\\文件.rar";try {File outFileDir = new File(rarPath);Archive archive = new Archive(new FileInputStream(rarFile));FileHeader fileHeader;while ((fileHeader = archive.nextFileHeader()) != null) {// 解决文件名中文乱码问题String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() :fileHeader.getFileNameW();String fileExt =fileName.substring(fileName.lastIndexOf(FileConstant.FILE_SEPARATOR) + 1);System.out.println(fileName);ByteArrayOutputStream os = new ByteArrayOutputStream();archive.extractFile(fileHeader, os);// 将文件信息写到byte数组中byte[] bytes = os.toByteArray();System.out.println(bytes.length);if ("rar".equals(fileExt)) {Archive secondArchive = new Archive(new ByteArrayInputStream(bytes));// 循环解压}}} catch (IOException e) {e.printStackTrace();}
}

第三种:

/*** 根据原始rar路径,解压到指定文件夹下* 这种方法只能解压rar 5.0版本以下的,5.0及其以上的无法解决** @param srcRarPath       原始rar路径+name* @param dstDirectoryPath 解压到的文件夹*/public static String unRarFile(String srcRarPath, String dstDirectoryPath) throws Exception {log.debug("unRarFile srcRarPath:{}, dstDirectoryPath:{}", srcRarPath, dstDirectoryPath);if (!srcRarPath.toLowerCase().endsWith(".rar")) {log.warn("srcFilePath is not rar file");return "";}File dstDiretory = new File(dstDirectoryPath);// 目标目录不存在时,创建该文件夹if (!dstDiretory.exists()) {dstDiretory.mkdirs();}// @Cleanup Archive archive = new Archive(new File(srcRarPath));  com.github.junrar 0.7版本jarAPI@Cleanup Archive archive = new Archive(new FileInputStream(new File(srcRarPath)));if (archive != null) {// 打印文件信息archive.getMainHeader().print();FileHeader fileHeader = archive.nextFileHeader();while (fileHeader != null) {// 解决中文乱码问题【压缩文件中文乱码】String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() : fileHeader.getFileNameW();// 文件夹if (fileHeader.isDirectory()) {File fol = new File(dstDirectoryPath + File.separator + fileName.trim());fol.mkdirs();} else { // 文件// 解决linux系统中\分隔符无法识别问题String[] fileParts = fileName.split("\\\\");StringBuilder filePath = new StringBuilder();for (String filePart : fileParts) {filePath.append(filePart).append(File.separator);}fileName = filePath.substring(0, filePath.length() - 1);File out = new File(dstDirectoryPath + File.separator + fileName.trim());if (!out.exists()) {// 相对路径可能多级,可能需要创建父目录.if (!out.getParentFile().exists()) {out.getParentFile().mkdirs();}out.createNewFile();}@Cleanup FileOutputStream os = new FileOutputStream(out);archive.extractFile(fileHeader, os);}fileHeader = archive.nextFileHeader();}} else {log.warn("rar file decompression failed , archive is null");}return dstDirectoryPath;}

Java解压RAR文件的几种方式相关推荐

  1. java如何解压rar文件怎么打开,java解压rar文件

    该文章参考了iteye某位大虾的博客,我自己进行了修改.请大家参考 package cn; import java.io.File; import java.io.FileNotFoundExcept ...

  2. java代码解压rar文件时报错,badRarArchive

    针对java代码解压rar文件时报错浅谈 1.针对所报的异常: de.innosystec.unrar.Archive setFile 警告: exception in archive constru ...

  3. win7怎么解压rar文件_win7解压rar文件的方法

    大家知道win7怎么解压rar文件?rar是一种常用的文件压缩与归档的私有格式,用于数据压缩与归档打包.加快传输速度,我们都会将文件进行压缩.但最近有Win7系统用户反映收到rar文件,却不知道w怎么 ...

  4. unrar - 解压rar文件

    我使用过的Linux命令之unrar - 解压rar文件 本文链接:http://codingstandards.iteye.com/blog/792239    (转载请注明出处) 用途说明 现在常 ...

  5. java解压.rar、.zip和.7z格式压缩包

    解压zip格式文件用到的jar包有ant-1.6.5.jar和commons-logging-1.2.jar ,在pom.xml中输入: <!--zip--> <dependency ...

  6. Mac 解压rar 文件

    Mac 解压rar 文件 第一种方法: 下载下面链接中的软件,安装好就可以直接用了. http://baijiahao.baidu.com/s?id=1604390455412644388&w ...

  7. 转:ASP自动解压RAR文件

    其实想实现这种功能很简单,首先要上传一个RAR的解压程序,就是RAR自己的解压程序,只需要它的核心程序RAR.EXE这个文件就可以了.然后就要上传一个执行RAR.EXE的程序 CMD.EXE 这个是w ...

  8. ubuntu16.04 server unrar解压rar文件提示command not found和解压tar.bz2文件

    ubuntu16.04 server unrar解压rar文件提示command not found和解压tar.bz2文件 Unrar解压rar文件失败 unrar e a.rar -sh: unr ...

  9. windows史上最方便解压rar文件的软件WeDo

    最近朋友推荐了一款软件WeDo,及其简单的操作,让我一下子就很喜欢去使用它,它是一款只解压Rar文件的软件,只有一个操作,所以极其方便,首先给大家看一下他的操作界面: 从操作界面来看,极其精简: 使用 ...

最新文章

  1. OO真经——关于面向对象的哲学体系及科学体系的探讨(上)
  2. Nginx安装方式介绍
  3. android 系统挂载ext4格式U盘,macOS 系统下格式化 U 盘为 ext4 格式
  4. 炸金花比牌规则java_陈陈来给你们炸金花的简易纸牌规则教学与心态指导
  5. 在html中 正确的嵌套方式是( ).,HTML及网页制作练习题-完整版
  6. 用VC++6.0 编写一个完整的
  7. Apache Spark源码走读之22 -- 浅谈mllib中线性回归的算法实现
  8. 蓝桥杯2015年第六届C/C++省赛A组第九题-垒骰子
  9. 内存交换空间(swap)
  10. LitePal数据存储
  11. 微信代扣踩坑日记(微信自动续费)
  12. 瑞典安百拓集团将把日本工厂搬到南京;好时在马来西亚开设新研发中心 | 美通企业日报...
  13. 合并与拆分数据模型(MSDM:Merging Spliting Data Modeling)
  14. php定时任务管理,基于PHP的定时任务管理器 Zebra-Crontab
  15. Java 基础面试之集合
  16. 2015小米校园招聘笔试题
  17. 计算机动画基础 吴,计算机动画中的视点合成与运动控制
  18. 行驶记录仪和道路运输车辆卫星定位系统相关标准总结
  19. 怎样的排序算法才算稳定?
  20. 《刻意练习:如何从新手到大师》——读书笔记(未完待续)

热门文章

  1. 关于阿里规范禁止使用Executors创建线程池的分析
  2. Paper Reading: Generating Artistic Portrait Drawings from Face Photos with Hierarchical GANs
  3. (浙江大学数据结构)PTA Complete Binary Search Tree (10 分)
  4. 作为一个程序员需要学哪些技能
  5. Windows服务器长时间保持远程桌面不被自动断开的方法
  6. 对display:table-cell的学习
  7. 简单了解如何自己动手制作RPM包
  8. qq2007涂鸦表情破解(QQHelperDll.dll)
  9. 基于W801和Helix解码库的MP3播放器(W801单片机学习笔记)热血沸腾,流畅播放
  10. usb转串口小板子(2)