背景

在开发的过程中,经常需要在文件系统里按某些条件搜索文件,比如音乐播放器扫描音乐,而搜索文件,大多人喜欢用递归的方式,而这也是最容易想到的方式。递归方式如果文件夹很深就容易造成栈溢出,而且不断的压栈退栈效率也会变低。我们常用的文件通常不会放在太深的文件夹,我们应该一层一层下去搜索,放在浅层目录先被搜索,如果实时显示结果,得到想要的结果即停止,用广度优先搜索的优势就更能体现出来了。

|--E:/
|--Music/|--pop/|--Jay/|--Leehom Wang/|--rock/|--beyond/
|--QQ/
|--q.mp3
|--k.mp3

假设有以上的目录结构,E:/是要搜索的根目录,搜索的的内容是后缀为mp3的文件,名称加斜杠的表示文件夹,只有名称的表示文件。

1.     如果用递归,它会依次搜索Music->pop-> LeehomWang->rock->beyond->QQ然后才到我们mp3文件,假设Music这个目录很深,它会一直搜下去,而我们在浅层目录的MP3文件却要等到最后才搜到。

2.     如果用广度优先搜索,我们一下子就可以搜索到我们的MP3文件,而且不需要压栈和退栈,如果文件夹数很多明显可以加快搜索速度。

总之在文件搜索时用广度优先搜索优于深度优先搜索(递归)

代码

/*** 广度优先搜索文件或文件夹* @param path 要搜索的目录* @param regex 搜索的通配符* @param isDisplyDir 是否在搜索结果中显示文件夹* @param isDisplayFile 是否在搜索结果中显示文件*/private static void bfsSearchFile(String path,String regex,boolean isDisplyDir,boolean isDisplayFile){if(!(isDisplayFile||isDisplyDir)){throw new IllegalArgumentException("isDisplyDir和isDisplayFile中至少要有一个为true");}Queue<File> queue=new LinkedList<>();File[] fs=new File(path).listFiles();//遍历第一层for(File f:fs){//把第一层文件夹加入队列if(f.isDirectory()){queue.offer(f);}else{if(f.getName().matches(regex)&&isDisplayFile){System.out.println(f.getName());}}}//逐层搜索下去while (!queue.isEmpty()) {File fileTemp=queue.poll();//从队列头取一个元素if(isDisplyDir){if(fileTemp.getName().matches(regex)){System.out.println(fileTemp.getAbsolutePath());}}File[] fileListTemp=fileTemp.listFiles();if(fileListTemp==null)continue;//遇到无法访问的文件夹跳过for(File f:fileListTemp){if(f.isDirectory()){queue.offer(f);从队列尾插入一个元素}else{if(f.getName().matches(regex)&&isDisplayFile){System.out.println(f.getName());}}}}}

Java用广度优先搜索快速搜索文件相关推荐

  1. 计算机查找文件的速度,如何快速搜索文件_怎么加快电脑里的文件搜索速度

    2019-11-01 10:40:56 浏览量:261 现在电脑的硬盘容量越来越大了,里面的内容也随之变多,所以当我们想要找到某个文件的时候也会变得很麻烦.特别是有些时间比较久了的,更加困难.那有网友 ...

  2. 【好物推荐】在 windows 上快速搜索文件和目录的软件——Everything

    一.Everything 介绍 一种快速高效的方式在 Windows 上搜索文件和目录 一款在 windows 上快速搜索文件和目录的软件. Everything 是一个功能强大且易于使用的工具 二. ...

  3. 安卓手机管理器_电脑文件快速搜索有everything,那手机呢?

    对于那些经常使用电脑和办公的人来说,肯定免不了查找文件,电脑自带的文件搜索根本满足不了需求,因为文件实在太多了,所以第三方文件搜索工具everything就诞生了,并且成为了win10必备的软件,ev ...

  4. linux之用 grep -r 关键字 快速搜索在目录下面的含有关键字的文件

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程 1.快速搜索在目录下面的含有关键字的文件 我们采用下面命令 cd directoriesgrep -r ...

  5. 【分享-windows文件快速搜索神器】Everything 免费、快速搜索文件/文件夹

    windows文件快速搜索神器 - Everything 下载:https://www.voidtools.com/ 先来体验一波 windows自带的搜索如下,等了一分钟还没搜索完: Everyth ...

  6. 如何使用计算机搜索文件,win7系统如何使用搜索筛选功能快速查找文件

    win7系统使用搜索筛选功能可以快速查找文件所需文件,能够大大提高工作效率, win7纯净版系统 电脑中储存着各种文件或图片等资料,这些数据的名称大小及时间归类不一,查找起来非常不容易.虽然windo ...

  7. 用计算机查找文件地址吗,如何快速搜索电脑里的文件( 快速准确定位和查找电脑文件位置的方法...

    今天给大家带来如何快速搜索电脑里的文件(,快速准确定位和查找电脑文件位置的方法,让您轻松解决问题. 怎样快速搜索电脑里的文件 如何快速准确定位和查找电脑文件位.我们在使用电脑的时候,经常需要进行一些操 ...

  8. 怎么用计算机搜索文件,如何查找文件 巧用Win7快速查找文件

    现在电脑硬盘越来越大,硬盘中的文件数据也越来越多,随着使用时间推移,硬盘中会积累很多数据文件,虽然有些资料可能已经没什么用,但日子久了难免会遇到一些某些时候需要用的上的重要文件不知道放在哪的情况.即使 ...

  9. win10系统通过文件名称快速搜索文件的软件

    描述:win10系统通过文件名称快速搜索文件的软件 介绍:everything,可以实现通过文件名称快速搜索文件

最新文章

  1. [c#]_ELVE_Message多功能用法
  2. 随机数的产生可用于的场景验证码 密码
  3. Makefile使用规则
  4. k8s常用对象图示:Deployment、ReplicaSet、Pod它们的关系
  5. 计算机中数据表示与计算实验答案,实验二计算机中的数据表示与计算-20210622102303.pdf-原创力文档...
  6. Python|队列Queue
  7. c语言整数与平均值,编写求一组整数的和与平均值的程序
  8. RTX5 | 线程标志组02 - 获取线程标志与清除线程标志
  9. 新版WebStorm安装详细流程
  10. I.MX6 make menuconfig OTG to slave only mode
  11. 【专家有话说】如何用TI-ONE与Angel框架玩转腾讯广告算法大赛?
  12. 推荐系统如何一键实现工业级部署? ElasticCTR 百度开讲
  13. c语言extern_【零基础C语言】- static和extern关键字 - 对变量的作用!
  14. hdu 4723 How Long Do You Have to Draw(贪心)
  15. python入门教程傻瓜版_大数据学习资料集--2014-12-23
  16. Android 音频系统:从 AudioTrack 到 AudioFlinger
  17. 爆破专用中国姓名排行TOP500
  18. AI算法可帮助因气候变化而流离失所的数百万难民找到新家了!
  19. MongoDB笔记之简单的增删改查
  20. [wine5.0] 解决wine所有软件乱码(中文不显示)问题

热门文章

  1. MYSQL注入(Welcome Dhakkan)
  2. 全球与中国三轴磁力计市场深度研究分析报告
  3. 【安全知识分享】PPTX|全民国家安全教育日课件(37页)(附下载)
  4. 首都机场率先引入阿里云ET航空大脑,每天调度1700架次航班节省5000个小时
  5. 计算机电学原理,什么是与门电路及与非门电路原理?
  6. 计算机网络实训室管理制度,机房实训室管理制度
  7. sshd: Corrupted MAC on input
  8. 【HMS】地图服务我的位置定位问题
  9. 计算机专业自考参考文献,自考计算机专著类参考文献 自考计算机核心期刊参考文献有哪些...
  10. Electron 项目(三):本地日志(electron-log)