递归算法就是方法自身直接或者间接地调用到了自身,它是一种写起来很简单,但理解起来不那么简单的算法。

一个功能在被重复地调用,并且运算的结果和上一次的调用有关, 这种时候,可以使用递归。

* 注意:
* 1.递归一定要明确递归结束的条件,否则会栈溢出
* 2.注意解决问题的递归次数,如果次数过多,也会发生栈溢出。

比较经典的例子有斐波那契数列、汉诺塔等,这里我们谈谈递归在File类中的使用。

一、牛刀小试

先看,两个简单的例子来了解递归。

 public class RecursionDemo {

     public static void main(String[] args) {

         System.out.println(getSum(6));//
toBinary(9);//
} //十进制转换为二进制
public static void toBinary(int num){
if(num>0){
toBinary(num/2);
System.out.print(num%2);
}
} //连续的加法
public static int getSum(int num){
if(num==1)
return 1;
return num+getSum(num-1);
}
}

二、File类应用1

练习:列出某目录下的内容(包含子目录中的内容),
即进行深度遍历.并且显示出目录层级。

 package www.brighten.io;

 import java.io.File;

 public class FileTraversalTest {

     public static void main(String[] args) {
//定义目录层级
int level=0;
//创建要列出的目录
File dir=new File("D:\\workplace\\BumpGame\\src");
listAll(dir,level);
} public static void listAll(File dir, int level) {
System.out.println(getSpace(level)+dir.getName());
File[] files=dir.listFiles();
level++;
for (int i = 0; i < files.length; i++) {
if(files[i].isDirectory()){//如果是目录
listAll(files[i], level);//递归
}
else//如果是文件
{
//打印出文件的名字,并在文件名前面加上相应目录层级的缩进
System.out.println(getSpace(level)+files[i].getName());
}
}
}
/**
* 计算不同目录层级的缩进
* @param level 目录层级
* @return String类型的缩进符号
*/
public static String getSpace(int level) {
StringBuilder space=new StringBuilder();
space.append("|--");
for (int i = 0; i <= level; i++) {
space.insert(0, " ");
}
return space.toString();
} }

程序输出如下:

   |--src
|--com
|--wsw
|--bump
|--Ball.java
|--Board.java
|--BumpGame.java
|--MoveObject.java
|--思路

三、File类练习2

练习:删除一个目录。

思路:需要从里向外删除,要进行深度遍历,使用递归算法。

 package www.brighten.io;
import java.io.File; public class RemoveDirTest { public static void main(String[] args) { File dir=new File("C:\\Test");
removeDir(dir);
} public static void removeDir(File dir) {
File[] files=dir.listFiles();
for(File file:files){
if(file.isDirectory()){
removeDir(file);
}else{
System.out.println(file+"::"+file.delete());//删除文件
}
}
System.out.println(dir+"::"+dir.delete());//删除内容已经为空的目录
} }

程序输出如下,可以看出删除的顺序是把目录中的内容依次删除,然后再删掉这个目录,递归下去,最后删除最上一级的目录。

所有做删除结果反馈的语句都显示为“true”,可见目录删除成功。

C:\Test\background.png::true
C:\Test\Cell.png::true
C:\Test\Test1\L.png::true
C:\Test\Test1\O.png::true
C:\Test\Test1::true
C:\Test\Test2\Test3\I.png::true
C:\Test\Test2\Test3\J.png::true
C:\Test\Test2\Test3::true
C:\Test\Test2::true
C:\Test::true

 

结合File类浅析递归的使用的更多相关文章

  1. Java IO体系之File类浅析

    Java IO体系之File类浅析 一.File类介绍 位于java.io下的Java File类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等.File对 ...

  2. File类、递归

    File类.递归 1.1File类概述 java.io.File表示文件和目录路径名的抽象类.可以对文件和文件夹进行创建删除.获取.判断.遍历等功能. 1.2路径\文件分割符,相对路径绝度路径 1.2 ...

  3. 01 语言基础+高级:1-8 File类与IO流_day08【 File类、递归】

    day08[File类.递归] 主要内容 File类 递归 教学目标 能够说出File对象的创建方式 能够说出File类获取名称的方法名称 能够说出File类获取绝对路径的方法名称 能够说出File类 ...

  4. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  5. Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte

    File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...

  6. File类,递归

    File类 File文件和目录路径名的抽象表示形式.即,Java中把文件或者目录(文件夹)都封装成File对象. File类包含     路径    path E:\...     目录 direct ...

  7. Java中的File类,递归是什么?

    一.IO概述 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和输出动作称为 ...

  8. Java【File类、递归】

    File 1.在io包中 操作电脑中的文件和文件夹 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 我们可以使用File类的方法     创建一 ...

  9. java基础知识回顾之javaIO类--File类应用:递归深度遍历文件

    代码如下: package com.lp.ecjtu.File.FileDeepList; import java.io.File; public class FileDeepList { /** * ...

随机推荐

  1. webdriver js点击无法点击的元素

    原文地址https://blog.csdn.net/galen2016/article/details/56847545 [WebDriver]调用JavaScript 一.WebDriver 提供了 ...

  2. Linux系统——DNS

    DNS系统的作用1. DNS服务器Internet中,大部分网站.邮件服务等服务器都使用了域名形式的地址,这种地址形式要比使用IP地址形式更加直观,更加容易被用户记住.FQDN格式(完整域名格式):在 ...

  3. Linux系统——ssh-key连接原理

    SSH是一种客户端连接,在Linux服务器下通过远程的方式将本地电脑连接到对方的电脑上. 远程连接的方式: (1)telnet命令(为明文传输,不安全) (2)(2)SSH(加密传输,安全) 操作的两 ...

  4. cocos代码研究(10)ActionEase子类学习笔记

    理论部分 缓动动作的基类,继承自 ActionInterval类.ActionEase本身是一个抽象的概念父类,开发者最好不要在代码中直接创建它的对象,因为它没有具体的执行效果,这一类的子类速度变化大 ...

  5. zw版【转发·台湾nvp系列Delphi例程】HALCON SetIcon1

    zw版[转发·台湾nvp系列Delphi例程]HALCON SetIcon1 procedure TForm1.Button1Click(Sender: TObject);var img : HIma ...

  6. SQL 根据条件取不同列中的值来排序

    1  有时候排序比较复杂,比如:领导对工资在1000到2000元之间的员工更感兴趣,于是要求工资在这个范围内的员工排在前面,以便优先查看 对于这种要求我们可以在查询中新生成一列,用多列排序的方法处理代 ...

  7. springcloud19---springCloudConfig

    Spring-cloud-config : 统一管理配置的组件,不同的环境不同的管理(连接池.数据库配置不一样).不同时间需要动态调整配置(双十一最大连接数要大). 分布式配置也可以使用config或 ...

  8. 20145302张薇 《网络对抗技术》逆向及BOF基础实践

    20145302张薇 <网络对抗技术>逆向及BOF基础实践 实验内容 实践对象:名为20145302的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单 ...

  9. JQuery Ajax jsonp

    JQuery ajax jsonp $.ajax({ method:"POST", url:"http://localhost:8081/ChenLei/PeopleSe ...

  10. tp5.1 Env使用

    5.1版本取消了所有的系统常量,原来的系统路径变量改为使用Env类获取(需要引入think\facade\Env) echo "app_path=========".Env::ge ...