java 全盘搜索文件_java递归思想实现全盘搜索文件之高速版
在上一篇文章中(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递归思想实现全盘搜索文件之高速版相关推荐
- 扫描java类文件_java递归与非递归实现扫描文件夹下文件的实例代码
java递归与非递归实现扫描文件夹下所有文件 java扫描指定文件夹下面的所有文件,供大家参考,具体内容如下 扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种 ...
- java解压两层zip文件_Java解压缩zip - 解压缩多个文件或文件夹实例
java解压缩zip - 多个文件(包括文件夹),具体如下: 对多个文件和文件夹进行压缩,对复杂的文件目录进行解压. 压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参 ...
- java读取系统中指定的文件_java读取jar中指定的文件
Java 档案 (Java Archive, JAR) 文件是基于 Java 技术的打包方案.它们允许开发人员把所有相关的内容 (.class.图片.声音和支持文件等) 打包到一个单一的文件中.JAR ...
- Java服务端向客户端写文件_java实现客户端向服务器发送文件
本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下 服务器源代码: import java.io.BufferedReader; import java.io. ...
- java编译找不到文件_java报错找不到文件解决方法
刚开始编写java代码时,肯定会遇到各种各样的bug,当然对于初学者这也是能理解的,首先来说一个比较常见的错误,如下: 一般编写新的程序时,都是从Hello,World开始的,比如在DOS上运行jav ...
- java合并txt文件_Java程序将两个txt文件合并为第三个txt文件 - Break易站
让给定的两个文件是file1.txt和file2.txt.我们的任务是将两个文件合并到第三个文件,例如file3.txt,但合并应该逐行进行.以下是交替合并的步骤. 为file3.txt创建Print ...
- java io流读取txt文件_Java使用IO流读取TXT文件
通过BufferedReader读取TXT文件 window系统默认的编码是GBK,而IDE的编码多数为UTF-8,如果没有规定new InputStreamReader(new FileInputS ...
- java ftp上传文件_jaVA使用FTP上传下载文件的问题
为了实现 FTP上传下载,大概试了两个方法 sun.net.ftp.FtpClient org.apache.commons.net 一开始使用sun.net.ftp.FtpClient,结果发现唯一 ...
- .gitignore文件_Java小白入门,Git忽略文件.gitignore详解
在工程中,并不是所有文件都需要保存到版本库中的,例如"target"目录及目录下的文件就可以忽略.在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件 ...
最新文章
- maven初学者常见错误汇总(三)
- 不出声也能命令Siri!康奈尔大学华人团队开发无声语言识别项链,中文英文都行...
- python有框架吗_Python几种主流框架
- 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树
- Linux常见命令汇总(不定期更新)
- 基于JAVA+SpringMVC+Mybatis+MYSQL的博客系统
- 【渝粤教育】国家开放大学2018年春季 0550-22T素描(一) 参考试题
- sql语句格式化数字(前面补0)、替换字符串
- 机器人技术创新与实践旧版本大纲
- CST学习笔记------材料边界
- 微云存储空间多大_微云免费存储容量由1T降为10G,百度还能坚持多久?
- 在互联网大厂,产品经理需要做的具体流程
- 微软Windows 11官方超高清4K壁纸提前放出,免费下载
- android Launcher 自定义View 高仿hola一键清理效果
- 免费 whois 查询 API
- BufferedReader.readLine() 日文乱码
- 教你几个Excel常用的数据分析技巧!
- Win10屏幕截图无法使用怎么回事
- 什么是Memcached?
- windows聚焦壁纸不更新_Win10系统下聚焦锁屏壁纸无法自动更换怎么解决