JAVA递归思想实现全盘搜索文件系统之基础版

JAVA递归思想实现全盘搜索文件系统之基础版

转载自:https://tufeng.xyz/java/25.html(来源:兔峰博客)

今天,我们用java利用递归思想实现全盘检索搜索文件系统,注意是全盘呦,当我们不知道某一文件在哪个地方,甚至不知道到哪个盘符去找时,

用这套程序来查找是不是更方便些呢?

函数解析:

globleSearchFiles(String des_filename):

首先,我们传入需要查找的文件名des_filename;

然后借助File.listRoots()函数列出文件系统的所有盘符文件(C,D,E,F,G盘这些)

然后遍历盘符借助调用搜索文件函数globleSearchFile()

globleSearchFile(String des_filename):

这个函数正是递归思想的具体实现,

dir_file.listFiles()列出该文件夹下的所有文件并放进数组files里面,然后遍历判断:

  1. 如果file是文件夹,继续调用searchFile函数实现递归搜索 ,返回结果exist,

       如果exist为true, 表示找到目标文件,返回true, 整个递归搜索结束
    
       如果exist为false,表示没有找到目标文件,跳过由递归函数继续搜索
    
  2. 如果file是文件,则判断file是不是我们要找的文件,

     如果是,返回true, 整个递归搜索结束
    
     如果不是我们要找的文件,则跳过,由递归函数继续搜索
    
  3. 否则表示该文件夹为空文件夹,返回false, 表示该文件下没有找到

整个搜索过程由C盘到D盘到E盘到…,一直等到目标文件被找到,或者整个文件系统检索结束

实例代码如下,可以测试一下:

import java.io.File;
// author: 守望者

public class Low_SearchFile {
	String find_path = null;
	
		public  boolean searchFile(String dir_path,String des_fileName) {
			
			 File dir_file = new File(dir_path);
			 File[] files = dir_file.listFiles();
			 
			  if(files!=null) {
				 for(File file:files) {
					 
					 if(file.isDirectory()) {
		                boolean exist =  searchFile(file.getAbsolutePath(),des_fileName);
		                 if(exist) {return true;}
		                 else {continue;}
					 }
					 else {
					//	 System.out.println("file: "+file.getAbsolutePath());
					//	 if(file.getName().equals(des_fileName)) {return true;}
						 
						 String file_name = file.getName();
						 
						 if(file_name.equals(des_fileName)) { 
							 find_path = file.getAbsolutePath();
							 return true;
						 }

					}  // if is file
				 }    // for
			 }
			  
			return false;
		 }  //  list_files	
	
  public boolean globleSearchFile(String des_fileName) {
		  File[] roots = File.listRoots();
		  
		  for(File file:roots) {
			  
			   boolean find = searchFile(file.getAbsolutePath(), des_fileName);
			      if(find) {return true;}
			      else {continue;}
	 } // for		  
		  
		return false;	  
	 }
	public String get_FindPath() {
		return find_path;
	} 
	 public static void main(String[] args) {
		
		 long start_time = System.currentTimeMillis();
		 
		 System.out.println("start to search...");
		 Low_SearchFile searchFile = new Low_SearchFile();
		 boolean find = searchFile.globleSearchFile("wslk_strings.xml");
		 
		 if(find) {System.out.println("already find, file path :"+searchFile.get_FindPath());}
		 else {System.out.println("sorry,not find the file");}
		 
		 System.out.println("用时:"+((System.currentTimeMillis()-start_time))+"毫秒");
//		 new SearchFile().new SearchThread("G:\\", "ToolTip.html").start();
		 
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前天正好要找一个本地文件, 就用java实现了, 全盘的本地文件搜索功能. 代码不依赖其它第三方jar, 连日志都用system.out了. 初学者可以了解下. 主程序: LocalFileSearcher.java LocalFileSearcher searcher = new LocalFileSearcher(); searcher.doSearch("迅雷"); log如下: Start search keyword: 迅雷 Start search all drivers! success: E:\迅雷下载 success: F:\迅雷下载 success: C:\Users\Administrator\Desktop\迅雷.lnk success: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\迅雷软件 success: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷 success: C:\Users\All Users\Microsoft\Windows\Start Menu\Programs\迅雷软件 success: C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\迅雷.lnk success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Libraries\迅雷下载.library-ms success: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷\迅雷影音.lnk success: C:\Users\All Users\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷 success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\迅雷软件 success: C:\Users\All Users\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷\迅雷影音.lnk success: C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\迅雷.lnk success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷 success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷\卸载迅雷.lnk success: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\迅雷软件\迅雷\迅雷.lnk Search costs : 3861(ms) File searched : 154848 Folder searched: 31463 Success match : 16 后续再更新完善

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值