结合File类浅析递归的使用

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

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

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

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

一、牛刀小试

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

 1 public class RecursionDemo {
 2
 3     public static void main(String[] args) {
 4
 5         System.out.println(getSum(6));//21
 6         toBinary(9);//1001
 7     }
 8
 9     //十进制转换为二进制
10     public static void toBinary(int num){
11         if(num>0){
12             toBinary(num/2);
13             System.out.print(num%2);
14         }
15     }
16
17     //连续的加法
18     public static int getSum(int num){
19         if(num==1)
20             return 1;
21         return num+getSum(num-1);
22     }
23 }

二、File类应用1

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

 1 package www.brighten.io;
 2
 3 import java.io.File;
 4
 5 public class FileTraversalTest {
 6
 7     public static void main(String[] args) {
 8         //定义目录层级
 9         int level=0;
10         //创建要列出的目录
11         File dir=new File("D:\\workplace\\BumpGame\\src");
12         listAll(dir,level);
13     }
14
15     public static void listAll(File dir, int level) {
16         System.out.println(getSpace(level)+dir.getName());
17         File[] files=dir.listFiles();
18         level++;
19         for (int i = 0; i < files.length; i++) {
20             if(files[i].isDirectory()){//如果是目录
21                 listAll(files[i], level);//递归
22             }
23             else//如果是文件
24             {
25                 //打印出文件的名字,并在文件名前面加上相应目录层级的缩进
26                 System.out.println(getSpace(level)+files[i].getName());
27             }
28         }
29     }
30 /**
31  * 计算不同目录层级的缩进
32  * @param level 目录层级
33  * @return  String类型的缩进符号
34  */
35     public  static String getSpace(int level) {
36         StringBuilder space=new StringBuilder();
37         space.append("|--");
38         for (int i = 0; i <= level; i++) {
39             space.insert(0, "    ");
40         }
41         return space.toString();
42     }
43
44 }

程序输出如下:

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

三、File类练习2

练习:删除一个目录。

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

 1 package www.brighten.io;
 2 import java.io.File;
 3
 4 public class RemoveDirTest {
 5
 6     public static void main(String[] args) {
 7
 8         File dir=new File("C:\\Test");
 9         removeDir(dir);
10     }
11
12     public  static void removeDir(File dir) {
13         File[] files=dir.listFiles();
14         for(File file:files){
15             if(file.isDirectory()){
16                 removeDir(file);
17             }else{
18                 System.out.println(file+"::"+file.delete());//删除文件
19             }
20         }
21         System.out.println(dir+"::"+dir.delete());//删除内容已经为空的目录
22     }
23
24 }

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

所有做删除结果反馈的语句都显示为“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

 

时间: 2024-10-08 23:13:27

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

Java之File类及递归树形展示目录_20150804

Java之File类及递归树形展示目录 20150804 下面的构造函数可以用来生成File 对象: File(String directoryPath)          File(String directoryPath, String filename)          File(File dirObj, String filename) 这里,directoryPath是文件的路径名,filename 是文件名,dirObj 一个指定目录的File 对象.下面的例子创建了三个文件:f1

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

代码如下: package com.lp.ecjtu.File.FileDeepList; import java.io.File; public class FileDeepList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("E:"+File.separator+"demodir

Java——File类,递归

一.File类 获取路径或目录分隔符 public static void main(String[] args) { //File类静态成员变量 //与系统有关的路径分隔符 String separator = File.pathSeparator; System.out.println(separator);// 是一个分号,目录的分割 Linux : //与系统有关的默认名称分隔符 separator = File.separator; System.out.println(separat

File类,递归

File类 File文件和目录路径名的抽象表示形式.即,Java中把文件或者目录(文件夹)都封装成File对象. File类包含     路径    path E:\...     目录 directory 文件夹     文件 fileFile类的成员变量 例子: // 名称分隔符 System.out.println(File.pathSeparator);//win ; linux : // 路径分隔符 System.out.println(File.separator);//win \

File类、递归

File类 File类的构造函数与File类的获取 import java.io.File; import java.io.FileFilter; public class MyFileter implements FileFilter{ public boolean accept(File pathname) { return pathname.getName().toLowerCase().endsWith(".java"); } } import java.io.File; pu

Java的File类浅析

File类,输入输出流基本上是离不开File类的. File类里面常用的构造方法 File(String pathname) File(File parent, String child) File(String parent, String child) File(URI uri) 常用实例方法 canRead() canWrite() canExecute() delete() getAbsolutePath() getName() getParent() isFile() isDirect

黑马程序员-File类+递归的简单应用

Java File类   Java.io.File Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File对象代表磁盘中实际存在的文件和目录.通过以下构造方法创建一个File对象. 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例. File(File parent, String child); 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例. File(String pathname) 根据 pa

day23&lt;File类递归练习&gt;

File类递归练习(统计该文件夹大小) File类递归练习(删除该文件夹) File类递归练习(拷贝) File类递归练习(按层级打印) 递归练习(斐波那契数列) 递归练习(1000的阶乘所有零和尾部零的个数) 递归练习(1000的阶乘尾部零的个数) 集合练习(约瑟夫环)   ###23.01_File类递归练习(统计该文件夹大小) 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小 * 从键盘接收一个文件夹路径 1,创建键盘录入对象 2,定义一个无限循环  3,将键盘录入的结果存储并封装成F

Java基础-File类篇、递归篇

1. File类 1.1 File类介绍 ? java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 语法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例. public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例. public File(File parent, Str