IO流之递归

递归:

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

public void method(){
	System.out.println(“递归的演示”);
	//在当前方法内调用自己
	method();
}

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

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

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

public class DiGuiDemo {
	public static void main(String[] args) {
		//计算1~num的和,使用递归完成
		int n = 5;
		int sum = getSum(n);
		System.out.println(sum);
		
	}
	public static int getSum(int n) {
		if(n == 1){
			return 1;
		}
		return n + getSum(n-1);
	}
}

l  代码执行流程图解

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

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

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

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

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

步骤:

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

         2. 调用getFileAll()方法

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

                  2.2 遍历得到每一个File对象

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

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

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

l  代码演示

public class FileDemo2 {
	public static void main(String[] args) {
		File file = new File("d:\test");
		getFileAll(file);
	}
	//获取指定目录以及子目录中的所有的文件
	public static void getFileAll(File file) {
		File[] files = file.listFiles();
		//遍历当前目录下的所有文件和文件夹
		for (File f : files) {
			//判断当前遍历到的是否为目录
			if(f.isDirectory()){
				//是目录,继续获取这个目录下的所有文件和文件夹
				getFileAll(f);
			}else{
				//不是目录,说明当前f就是文件,那么就打印出来
				System.out.println(f);
			}
		}
	}
}

 

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

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

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

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

步骤:

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

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

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

                  2.2 遍历得到每一个File对象

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

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

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

实现代码步骤:

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);
			}
		}
	}
}

 

l  自定类继承FilenameFilter过滤器接口

//定义类实现文件名称FilenameFilter过滤器
class MyFileFilter implements FilenameFilter{
	public boolean accept(File dir, String name) {
		return name.endsWith(".java");
	}
}

 

 

  

原文地址:https://www.cnblogs.com/lxx2014/p/9506102.html