JAVA基础------IO-----第2天

第2章 递归

1.1 递归的概述

递归,指在当前方法内调用自己的这种现象

递归分为两种,直接递归和间接递归。

直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

l 递归的代码演示,计算1-n之间的和,使用递归完成

package dayio.day02.com;
import javassist.bytecode.CodeIterator.Gap;
/*
 * 递归方法
 */
public class DIGuiDemo {
public static int getSum(int n){
if (n==1) {
return 1;
}
return n+getSum(n-1);
}
public static void main(String[] args) {
//计算1————100的和
//递归完成
int n=5;
int sum = getSum(n);
System.out.println(sum);
}

}


注意:递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

1.2 递归打印所有子目录中的文件路径

编写一个方法用来打印指定目录中的文件路径,并进行方法的调用

要求:若指定的目录有子目录,那么把子目录中的文件路径也打印出来

步骤:

1. 指定要打印的目录File对象

2. 调用getFileAll()方法

2.1 获取指定目录中的所有File对象

2.2 遍历得到每一个File对象

2.3 判断当前File 对象是否是目录

判断结果为true,说明为目录,通过递归,再次调用步骤2getFileAll()方法

判断结果为false,说明是文件,打印文件的路径

l 代码演示

package dayio.day02.com;
import java.io.File;
/*
 * 递归方法
 */
public class DIGuiDemo {
//获取指定目录及子目录的所有文件
public static void getFileAll(File f){
File[] f2 = f.listFiles();
//遍历输出所有文件
for (File f3:f2) {
if (f3.isDirectory()) {//判断是否存在文件,读取子目录,有子目录继续
getFileAll(f3);
}else {
System.out.println(f);
}
}
}
public static void main(String[] args) {
File f = new File("D:\\MyEclipse Professional 2014");
getFileAll(f);//调用getFileAll()方法
}
}

1.3 搜索指定目录中的.java文件(含子目录)

需求:打印指定目录即所有子目录中的.java文件的文件路径

要求:编写一个方法用来打印指定目录中的.java文件路径,并进行方法的调用

若指定的目录有子目录,那么把子目录中的.java文件路径也打印出来

步骤:

1. 指定要打印的目录File对象

2. 调用getFileAll()方法,传入要打印的目录File对象

2.1 通过FilenameFilter过滤器获取指定目录中的所有.java类型的File对象

2.2 遍历得到每一个File对象

2.3 判断当前File 对象是否是目录

判断结果为true,说明为目录,通过递归,再次调用步骤2getFileAll()方法

判断结果为false,说明是文件,打印文件的路径

1.4 实现代码步骤

l 测试类

public class FileDemo4 {

public static void main(String[] args) {

File file = new File("d:\\test");

getFileAll(file);

}

//获取指定目录以及子目录中的所有的文件

public static void getFileAll(File file) {

File[] files = file.listFiles(MyFileFilter());

//遍历当前目录下的所有文件和文件夹

for (File f : files) {

//判断当前遍历到的是否为目录

if(f.isDirectory()){

//是目录,继续获取这个目录下的所有文件和文件夹

getFileAll(f);

}else{

//不是目录,说明当前f就是文件,那么就打印出来

System.out.println(f);

}

}

}

}

自定类继承FilenameFilter过滤器接口

//定义类实现文件名称FilenameFilter过滤器

class MyFileFilter implements FilenameFilter{

public boolean accept(File dir, String name) {

return name.endsWith(".java");

}

}

猜你喜欢

转载自blog.csdn.net/qq_31308933/article/details/80727076