作者:张昌昌

为了获取一个压缩包中的文件,而该压缩包里可能又含有压缩包 、文件夹、文件夹里又包含压缩包、文件等各种嵌套的情况,采用广度优先遍历和深度优先遍历的方法解决了此问题。

public static List getFilesOfZipAndRar(String zipPath) throws IOException

{

String destPath = zipPath.substring(0,zipPath.lastIndexOf(".")) + "/";

//先将该压缩文件解压

if(zipPath.contains(".zip"))

unZipFile(new File(zipPath),destPath);

if(zipPath.contains(".rar"))

unRarFile(new File(zipPath),destPath);

//进入解压目录,将该目录的所有zip都解压

recursiveCompressedFile(new File(destPath));

//得到该目录下的所有文件

Iterator iterator = Directory.walk(destPath).iterator();

List files = new ArrayList();

File file = null;

while(iterator.hasNext())

{

file = (File)iterator.next();

if(file.getName().contains(".rar"))

continue;

files.add(file);

}

return files;

}

public static void recursiveCompressedFile(File file) throws IOException

{

//广度优先遍历

for(File e:file.listFiles())

{

String filePath = e.getAbsolutePath().replace("\\\\","/");

//深度优先遍历

if(e.getName().contains(".zip"))

{

String desString = filePath.substring(0,filePath.lastIndexOf("."))+"/";

unZipFile(e,desString);

e.delete();

recursiveCompressedFile(new File(desString));

}

if(e.getName().contains(".rar"))

{

String desString = filePath.substring(0,filePath.lastIndexOf("."))+"/";

unRarFile(e,desString);

e.delete();

recursiveCompressedFile(new File(desString));

}

if(e.isDirectory())

recursiveCompressedFile(e);

}

}

总结:该问题的解决过程中学习了:(1)广度优先和深度优先的策略;(2)递归调用的方法;(3)如何解压文件

转载请说明出处。

Java获取压缩包内文件数_java获取递归获取嵌套压缩包(zip和rar)中的所有文件相关推荐

  1. java zip 创建目录_Java实现Zip压缩目录中的所有文件

    java中将一个文件夹下所有的文件压缩成一个文件,然import java.io.*; import java.util.zip.*; public class CompressD { // 缓冲 s ...

  2. poi 获取excel列宽度_JAVA使用POI获取Excel的列数与行数

    JAVA使用POI获取Excel的列数与行数 发布于 2020-8-19| 复制链接 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Ja ...

  3. Java批量高效压缩支持加解密支持所有压缩格式(Zip/7z/rar)

    前言:有时候需要对很多文件进行压缩,几个还好如果有100个呢对吧,为什么不借助咱们强大的java呢,所以我就写了一个可以批量压缩,支持所有压缩格式的工具类当然也支持加密和解密,下面就是工具类的代码 废 ...

  4. Java获取压缩包内文件数_使用java.util.zip.ZipFile,压缩包内文件数量过多则报错问题....

    引入的jar包不对,或者你的压缩文件不标准.62616964757a686964616fe78988e69d8331333365646331一般就会报这个错误.关于上面英语的翻译:Key featur ...

  5. java获取当前年月日历_java万年历,获取该年月日历表

    这篇文章主要介绍了java获取对应年月分日历表有需要的朋友可以来参考下 这篇文章应用java技术输入年份和月份获取该年月日历表,下面通过一段代码给大家做展示: 输入年份和月份,打印出这个月的日历表 1 ...

  6. java获取http状态码_java – 使用OkHttp获取Http状态码

    我正在使用OkHttp来获取一些网站的内容. 但是,我无法从响应中获取Http-Status代码. 我的Java代码: OkHttpClient client = new OkHttpClient() ...

  7. java point类求两点间距离_JAVA 根据经纬度获取两点之间的距离(转载)

    原文https://blog.csdn.net/jk940438163/article/details/83147557 思路: 1. 地球本身是个不规则的球体,这里将其看着一个规制球体 2. 半径取 ...

  8. java 输出当前行号_Java编程实现获取当前代码行行号的方法示例

    本文实例讲述了Java编程实现获取当前代码行行号的方法.分享给大家供大家参考,具体如下: 最近的项目中,为了实现自定义的log类,能够输出具体的代码行行号,我通过使用StackTraceElement ...

  9. java 获取mac地址 乱码_Java:开机获取Mac地址问题

    server.jar设置为开机自启动,启动时会执行getLinuxMac()方法获取本机Mac地址: private static String getLinuxMac() { StringBuffe ...

  10. java获取泛型的值_java 反射之获取泛型对象的所有字段与对应的值(包括父类的)...

    public static void main(String[] args) throwsIntrospectionException { SysUser obj= newSysUser(); obj ...

最新文章

  1. Python应用实战-用Highcharts实现可视化分析
  2. 前端学习(3253):vs code中组件化编码
  3. (亲测)Hbase安装(傻瓜式安装)
  4. 第四节:EasyUI的一些操作
  5. 开课吧:微服务与DDD解析
  6. 《图像分析基础》的专有名词解析
  7. 【学术分享】发顶会论文,怎么就那么难?
  8. 2014年最新前端开发面试题(题目列表+答案 完整版)
  9. Android文件资源(raw/data/asset)的存取
  10. 鼠标点计算机再点网络也是选定,鼠标左键单击变双击,点一下变两下是什么原因?...
  11. kinect v1原理_微软官方博客揭秘Kinect工作原理
  12. 用集成移位寄存器74194设计一个模4的环形计数器电路
  13. 搭建服务器提供IOS IPA包下载
  14. [Android]通讯录字段
  15. mysql engine ndb_ndbcluster引擎表同步到innodb引擎报错Error 'Unknown storage engine 'ndbcluster'...
  16. 深入探讨大数据权限管理方案-从哲学到技术
  17. (修订)MySQL优化/面试,看这一篇就够了
  18. 如何用python实现题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  19. SpringCloud-8-事务控制
  20. matlab符号矩阵入门

热门文章

  1. JFrame+JButton简单使用(菜鸟入门)——JAVA
  2. idea设置字体大小样式和背景色
  3. 岩土工程颗粒流软件PFC6.0技巧——按计算时间导出数据、图像及保存文件
  4. 动态规划(DP算法)详解
  5. Python 字符串 循环
  6. 微信小程序:使用阿里icon图标
  7. Linux:Redis搭建集群
  8. 写给后端程序员的前端开发流程与正确姿势.
  9. surf算法matlab代码,surf算法matlab源码
  10. matlab显示 图注,Matlab图例注记乱码(2019a)