概述
现在有这样一个需求,给你一个目录,需要你在此目录中查找全部名字中包含指定字符的文件。
这题的主要难点在于:目录中可能包含子目录,子目录中又会包含子目录。而我们事先没办法确定子目录到底有多少层!这时候就需要用到递归算法了。
说起递归,通过一个例子相信大家并不难理解。我们小时候都听过一个故事:从前有座山,山里有座庙,庙里有个老和尚,老和尚在给大家讲故事。故事的内容是这样的:从前有座山,山里有座庙,庙里有个老和尚,老和尚在给大家讲故事。故事的内容是这样的:从前有座山......
我们都知道,以上的故事就是在无限循环。从编程的角度来说,这就是典型的死循环。而递归其实和这个类似,也是一个无限循环过程。但递归和死循环之间有一个非常重要的特征:那就是终止条件。我们都知道,死循环是没办法结束的,所以称之为死循环。但递归是有终止条件的,只要这个条件满足,递归的循环就会立即结束。所以你也可以简单的把递归理解为可以结束的无限循环(之所以称之为无限循环,是因为我们谁也不能确定这个终止条件什么时候会发生,也就是事先谁也不确定这个循环会执行多少次,反正只是知道他能结束就对了)。如果你恰好有这样的场景,那么不用怀疑,你需要使用递归算法来完成你的工作!
上面的需求正好就满足这个递归的场景。因为我们需要到目录中查找文件,而一个目录中可能有文件,也可能会有子目录,子目录中也是同样的情况。这就形成了一个循环,即在一个目录中检查文件和子目录。如果此目录中出现了子目录,需要重复以上动作。使用递归的原因在于,虽然我们可以重复以上的动作,但我们并不确定子目录到底会存在多少层。所以事先并不知道我们的循环会执行多少次。但我们循环结束的条件是确定的,即当查找到某个目录的时候,如果此目录中没有子目录了,那我们的循环就可以结束了。以上就是递归算法在本例当中的使用分析,下面我们通过代码来实现这个过程:
打开Eclipse,新建一个Java Project,命名为recursion.
在src中新建包file--新建类Search.java
本次实例我们在D盘新建目录test,然后我们在此目录内查找名称中含"hello"的全部文件,d:est目录的结构是这样的:
D:est
------a(folder)
--------my(folder)
-------new(folder)
-------hellofy.java
-------这是hello.txt
--------hello.sql
说明:1、test目录下有目录a
2、a 目录下有目录my和文件hello.sql
3、my目录下有目录new和文件 这是hello.txt
4、new目录下有文件 hellofy.java
我们的程序指定到目录D:est,需要找到此目录中包含hello的文件,代码如下:
package file;import java.io.*;public class Search {/// 要查找的文件名(包含)private String containFileName = "hello";/** * 递归查找指定文件夹内含指定文件名的文件 * * @param path */public void findChild(String path) { File file = new File(path); File[] children = file.listFiles();///得到此目录内的全部文件与子目录列表 if (children != null) { for (File item : children) { if (item.isDirectory()) {//如果是目录,继续调用自身方法,实现递归调用 findChild(item.getAbsolutePath());// 递归调用方法本身,将当前子目录作为参数传递进去 } else { if (item.getName().contains(containFileName)) { System.out.println("找到文件:" + item.getAbsolutePath()); } } } }} public static void main(String[] args) throws Exception { Search test = new Search(); test.findChild("d:est"); }}
运行以上代码,得到结果:
找到文件:d:estahello.sql
找到文件:d:estamyewhellofy.java
找到文件:d:estamy这是hello.txt
最后
以上就是温婉灰狼为你收集整理的java实现递归下降分析_使用递归实现检查未知层级目录中的文件-Java实用技能的全部内容,希望文章能够帮你解决java实现递归下降分析_使用递归实现检查未知层级目录中的文件-Java实用技能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复