Java教程:如何不使用递归实现文件夹的遍历?

大家好,这篇文章为大家介绍一下怎样遍历电脑上的一个文件夹。

通常遍历文件夹我们都是使用递归进行操作,这种方式比较简单,也比较容易理解,本文的第一种实现也是使用递归。然后再为大家介绍另一种不使用递归的方式,只用到了循环和集合,这种方式由于没有使用递归,所以效率更高一些!

一、使用递归遍历文件夹1.1 实现思路

整体思路:

1). 使用File封装初始目录。

2). 打印这个目录。

3). 获取这个目录下所有的子文件和子目录的数组。

4). 遍历这个数组,取出每个File对象

5).判断这个File是否是一个文件,是:

打印

6).否则(就是一个目录):

递归调用(从步骤2到这里,就可以形成一个递归方法)

1.2 代码实现public class Demo{ public static void main(String[] args){ //1).使用File封装初始目录 File dir = new File(“d:\\多级目录”); //调用递归方法 searchFile(dir); } //递归方法 public static void searchFile(File dir){ //2).打印这个目录 System.out.println(dir.getAbsolutePath()); //3). 获取这个目录下所有的子文件和子目录的数组。 File[] files = dir.listFiles(); //4). 遍历这个数组,取出每个File对象 if(files != null){ for(File f : files){ //5).判断这个File是否是一个文件,是: if(f.isFile()){ //打印 System.out.println(f); }else{//6).否则就是一个目录,继续递归 //递归 searchFile(f); } } } } }

这种实现方式的核心就是每个目录都会调用searchFile()方法,而searchFile()方法针对每个目录的工作都是一样的:打印目录、获取目录下所偶有的子文件和子目录的数组、遍历数组……从而形成了递归调用。

由于递归需要再次调用方法,导致方法入栈,从而降低程序的执行效率!

二、不使用递归遍历文件夹2.1 实现思路

不使用递归的思路

1). 使用File封装初始目录。

2). 定义一个集合,用于存储”一个目录下所有的子文件和子目录的File对象”。

3). 集合中先添加”初始目录”。

4). 循环,条件:集合非空

1). 取出,并删除集合中的索引为0的”File对象”(此File对象可能是文件,也可能是目录)

2). 打印这个File对象。

3). 判断此File对象是否是”目录”,是:

获取此目录下所有子文件和子目录的File数组,并添加到这个集合的前面

循环结束

这个流程用循环代替了递归,每次将目录的File对象添加到集合,然后再取出,删除。再获取这个目录下所有的子目录和子文件的数组,并添加到集合,然后再循环。最终直至把所有文件都取出,并删除,打印,集合为空,结束循环。

2.2 代码实现/ * 非递归遍历目录 * 创建一个List对象,把目录放到List中 * 循环遍历,每次取出第一个元素,如果是目录就把目录中的内容放到List最前面,如果不是目录只取出即可。 */ public class SearchDir { public static void main(String[] args) { File dir = new File(“d:\\多级目录”); searchDir(dir); } public static void searchDir(File dir) { //定义集合 List<File> list = new ArrayList<>(); //将参数dir对象添加到集合 list.add(dir); //循环,条件:集合非空 while (!list.isEmpty()) { //取出,并删除集合的第一个File对象 File file = list.remove(0); //打印这个File对象 System.out.println(file.getAbsoluteFile()); //如果此File对象是一个目录 if(file.isDirectory()) { //获取此File对象下所有子文件和子目录的数组,并添加到集合的前面 list.addAll(0, Arrays.asList(file.listFiles())); } //继续下一次循环…… } } }

这种方式仅仅用到了集合,没有使用递归,所以占用系统资源较小,效率比较高!是不是很巧妙?大家学会了吗?

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:Java教程:如何不使用递归实现文件夹的遍历? https://www.dachanpin.com/a/cyfx/11837.html

(0)
上一篇 2023-05-12 03:48:49
下一篇 2023-05-12 03:49:55

相关推荐

  • 2018“创客中国”智造与再制造创新创业大赛落幕

    工信部信息中心总工程师童晓民表示,自2015年“创客中国”国家级创新创业平台开始运行这三年间,充分利用市场机遇,吸纳银行、产业投资基金、创业投融资机构广泛参与,为创和中小微企业搭建融资服务平台,促进产业与金融的良好结合。此次也是“创客中国”首次与天津子牙经济开发区直接进行合作,特别希望通过跟园区结合,让项目有更好的定位,让选拔出来的优秀项目能够直接在园区落地…

    创业分享 2023-05-16
    125
  • 内蒙古大学创业学院创新创业教育中心揭牌

      内蒙古晨报全媒体平台消息(记者 王乐)10月27日,“中国移动互联网教育产业联盟创新创业与就业教育示范基地”和“创业学院创新创业教育中心”揭牌仪式在内蒙古大学创业学院学术报告厅隆重举行,吹响了内蒙古高校“双创”教育改革的号角。   据悉,此次内蒙古大学创业学院创新创业教育中心的成立和创业学院于今年秋季学期开设的大学生就业创业虚拟仿真实训课实现了同步。而创…

    创业分享 2023-05-21
    152
  • 军创惠民就业创业工程 率先在内蒙古自治区鄂尔多斯基地启动

    2018年5月28日,由中国民营科技促进会双创工作委员会、军创惠民就业创业管理中心主办,军创惠民鄂尔多斯基地承办,保定市立发纸业有限公司、糖平衡医生集团、山东临沂翔达生物科技有限公司、沈阳北星脊柱梳理有限公司等来自全国各地的爱心企业、企业家及内蒙自治区鄂尔多斯市各界人士参加的一场“军创惠民就业创业工程鄂尔多斯基地启动仪式”的活动,在鄂尔多斯市隆重举行。 出席…

    创业分享 2023-05-17
    145
  • 北京市侨联创新创业联盟在京成立

    ② 任何单位或个人认为本网站或本网站链接内容可能涉嫌侵犯其合法权益,应该及时向本网站书面反馈,并提供身份证明,权属证明及详细侵权情况证明,本网站在收到上述文件后,将会尽快移除被控侵权的内容或链接。   北京市侨联创新创业联盟的成立,对于侨联发挥组织独特优势,凝聚侨界创新力量,不断提高围绕中心、服务大局的履职能力和不促进侨联工作发展都将会产生非常积极的影响。 …

    创业分享 2023-05-13
    191
  • 优财富独家专访:金融大佬创业经验分享 成功只需三步

    “选择创业是选择一种生活方式,选择以后到底要走什么样的路,这段路不是别人给我规划好的,而是我自己可以去书写的一条路。”——刘英魁(中天嘉华董事长兼CEO) 创业永远是诱人的话题,随着时代的进步和经济的发展,人们已经不再单单满足于通过给别人打工来体现自身的价值。特别是在”大众创业、万众创新”的今天,各种创业途径和创业渠道撩拨着那颗蠢蠢欲动的心,越来越多的人选择…

    创业分享 2023-05-24
    151

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息