在上一篇文章中(JAVA递归思想实现全盘搜索文件系统之进阶版)我们借助递归思想和多线程提升了全盘搜索文件系统的速度,

但是通过测试,好像还是有点慢,有没有办法再快一点呢?通过短暂的探索,我发现是可以再快一点的,岂止快一点,简直快很多。

这一次在上一篇实例的基础上做出改进,主要在globleSearchFile() 函数上做出改进

解析:

这里依然遍历文件系统所有盘符,但不是像上次那样,直接开启线程执行搜索,而是遍历对盘符下的文件集:

如果子文件是一个文件,则判断是否为目标搜索文件,

如果子文件是一个文件夹,则开启线程进行该文件夹下的全局搜索

这里相比上次(进阶篇)的改进之处在于,文件集的纵向深度更深一级,

开启的线程数也多了n倍,搜索效率上也高了n倍

快则几十毫秒,慢则三四秒,经实测,有时候比win10系统搜的还快

下面只给出改进部分的函数代码,其余代码同这篇文章里一致(JAVA递归思想实现全盘搜索文件系统之进阶版),请灵活进行替换:

public String Globlelist_files(String des_fileName) {

File[] roots = File.listRoots();

for(File file:roots) {     // 遍历文件系统所有盘符

File[]files = file.listFiles();   // 得到盘符下所有子文件(文件夹)

for(File f:files) {            // 遍历子文件(文件夹)数组

if(f.isFile()&&f.getName().equals(des_fileName)) { // 如果是文件,判断是否为目标文件

find = true;

find_path = f.getAbsolutePath();

//       find_file();

return f.getAbsolutePath();

}

else {     // 如果是文件夹,则开启一个函数对该文件夹下进行全局搜索

String dir_path = f.getAbsolutePath();

new Thread(new Runnable() {

@Override

public void run() {    // 判断处理搜索结果

boolean find = list_files(dir_path, des_fileName);

if(find) {find_file();}

else {not_findFile();}

}

}).start();

}

} // for

}

synchronized (object) {

while(!over) {

try {

object.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//  System.out.println("find? "+find);

return find_path;

}

java 全盘搜索文件_java递归思想实现全盘搜索文件之高速版相关推荐

  1. 扫描java类文件_java递归与非递归实现扫描文件夹下文件的实例代码

    java递归与非递归实现扫描文件夹下所有文件 java扫描指定文件夹下面的所有文件,供大家参考,具体内容如下 扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种 ...

  2. java解压两层zip文件_Java解压缩zip - 解压缩多个文件或文件夹实例

    java解压缩zip - 多个文件(包括文件夹),具体如下: 对多个文件和文件夹进行压缩,对复杂的文件目录进行解压. 压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参 ...

  3. java读取系统中指定的文件_java读取jar中指定的文件

    Java 档案 (Java Archive, JAR) 文件是基于 Java 技术的打包方案.它们允许开发人员把所有相关的内容 (.class.图片.声音和支持文件等) 打包到一个单一的文件中.JAR ...

  4. Java服务端向客户端写文件_java实现客户端向服务器发送文件

    本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下 服务器源代码: import java.io.BufferedReader; import java.io. ...

  5. java编译找不到文件_java报错找不到文件解决方法

    刚开始编写java代码时,肯定会遇到各种各样的bug,当然对于初学者这也是能理解的,首先来说一个比较常见的错误,如下: 一般编写新的程序时,都是从Hello,World开始的,比如在DOS上运行jav ...

  6. java合并txt文件_Java程序将两个txt文件合并为第三个txt文件 - Break易站

    让给定的两个文件是file1.txt和file2.txt.我们的任务是将两个文件合并到第三个文件,例如file3.txt,但合并应该逐行进行.以下是交替合并的步骤. 为file3.txt创建Print ...

  7. java io流读取txt文件_Java使用IO流读取TXT文件

    通过BufferedReader读取TXT文件 window系统默认的编码是GBK,而IDE的编码多数为UTF-8,如果没有规定new InputStreamReader(new FileInputS ...

  8. java ftp上传文件_jaVA使用FTP上传下载文件的问题

    为了实现 FTP上传下载,大概试了两个方法 sun.net.ftp.FtpClient org.apache.commons.net 一开始使用sun.net.ftp.FtpClient,结果发现唯一 ...

  9. .gitignore文件_Java小白入门,Git忽略文件.gitignore详解

    在工程中,并不是所有文件都需要保存到版本库中的,例如"target"目录及目录下的文件就可以忽略.在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件 ...

最新文章

  1. maven初学者常见错误汇总(三)
  2. 不出声也能命令Siri!康奈尔大学华人团队开发无声语言识别项链,中文英文都行...
  3. python有框架吗_Python几种主流框架
  4. 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树
  5. Linux常见命令汇总(不定期更新)
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的博客系统
  7. 【渝粤教育】国家开放大学2018年春季 0550-22T素描(一) 参考试题
  8. sql语句格式化数字(前面补0)、替换字符串
  9. 机器人技术创新与实践旧版本大纲
  10. CST学习笔记------材料边界
  11. 微云存储空间多大_微云免费存储容量由1T降为10G,百度还能坚持多久?
  12. 在互联网大厂,产品经理需要做的具体流程
  13. 微软Windows 11官方超高清4K壁纸提前放出,免费下载
  14. android Launcher 自定义View 高仿hola一键清理效果
  15. 免费 whois 查询 API
  16. BufferedReader.readLine() 日文乱码
  17. 教你几个Excel常用的数据分析技巧!
  18. Win10屏幕截图无法使用怎么回事
  19. 什么是Memcached?
  20. windows聚焦壁纸不更新_Win10系统下聚焦锁屏壁纸无法自动更换怎么解决

热门文章

  1. 创未来,享非凡,openGauss Developer Day 2022圆满举行
  2. 绘声绘影X9 -音频基本设置(6)
  3. Anaconda+OpenCV+tensorflow环境搭建和安装
  4. 三十岁的男人(zz)
  5. 英语之痛:好久也让老外在启蒙期就开始学习汉语
  6. ffmpeg基本用法(转)介绍
  7. 读《互联网创业密码》之感想
  8. 数据库的前世今生04
  9. windows 7 共享打印机 给 window xp - 2/2
  10. 项目管理软件四大作用介绍