在Java中,方法递归是一种特殊的情况,其中方法直接或间接地调用自身。为了使用方法递归,方法需要有基本情况,即不再调用自身的条件,以防止进入无限循环。
我们来做一个搜索文件并打开的案例。以打开QQ为例,因为我的电脑只有C盘,我搜索文件的地方,就写C盘。
public class Test {
public static void main(String[] args) throws IOException {
searchUnpack(new File("C:/"), "QQ.exe");
}
/**
* 搜索需要打开的文件方法
* @param dir 开始搜索的地址
* @param fileName 需要打开的文件
* @throws IOException 抛出会出现的异常
*/
public static void searchUnpack(File dir, String fileName) throws IOException {
//排除异常状况
if (dir == null ||!dir.exists() || dir.isFile()) {
return;
}
//获取当前目录下的一级文件
File[] files = dir.listFiles();
//判断不是空文件
if (files!= null) {
//开始遍历文件夹
for (File f : files) {
//判断是不是文件
if (f.isFile()) {
//再判断是不是需要的文件
if (f.getName().contains(fileName)) {
//是需要的文件输出并打开文件
System.out.println("找到了: " + f.getAbsolutePath());
Runtime runtime = Runtime.getRuntime();
runtime.exec(f.getAbsolutePath());
}
} else {
//是文件夹,就继续重复搜索
searchUnpack(f, fileName);
}
}
}
}
}
这段代码主要实现了一个在指定目录下搜索特定文件名的文件,并在找到后执行该文件的功能。 在main方法中,我们调用了searchUnpack方法,并传入了根目录 C:/ 和要搜索的文件QQ.exe。searchUnpack方法首先进行了一系列的条件判断,以确保传入的目录是有效的。如果目录为空、不存在或者本身是一个文件,那么直接返回。 接着,通过 listFiles方法获取目录下的所有文件和子目录。对于每个文件,如果是普通文件并且文件名包含我们要搜索的字符串,就输出其绝对路径,并通过 Runtime类来执行该文件。如果是子目录,则递归调用searchMethod方法继续搜索。 例如,如果我们在 C:/目录下有一个名为 QQ.exe 的文件,并且代码运行时能够正确识别和执行,这就实现了我们的搜索和执行目标。
但是这种案例是有很大问题的,这会很吃我们的性能,因为要从C盘里找到一个文件,是一个非常大的工程,得需要分特殊情况使用。
标签:文件,searchUnpack,Java,递归,搜索,File,方法,dir From: https://blog.csdn.net/2301_76253020/article/details/140080646