zoukankan      html  css  js  c++  java
  • 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");
    	}
    }
    

     

     

      

  • 相关阅读:
    数字随机码
    MYSQL数据导出乱码 MYSQL数据导入乱码
    提交表单弹出新窗口
    腾讯捐款居然用Q币,无耻!
    PowerShell如何依靠全局错误处理并执行脚本
    Windows PowerShell 2.0语言之函数和过滤器
    Windows PowerShell 2.0创建调用脚本文件
    Windows PowerShell 2.0 开发之命令别名
    Windows PowerShell 2.0之函数和脚本块共存
    Windows PowerShell 2.0命令别名技巧与内置别名
  • 原文地址:https://www.cnblogs.com/lxx2014/p/9506102.html
Copyright © 2011-2022 走看看