2021-12-22_学习B站Java基础视频_IO流(列出目录下所有内容-递归-带层次)

P256、P257:IO流(列出目录下所有内容-递归、列出目录下所有内容-带层次)

/*
列出指定目录下文件或者文件夹,包含子目录中的内容。
也就是列出指定目录下所有内容。

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种变现形式,或者编程手法,成为递归。

递归要注意:
1.限定条件

2.要注意递归的次数。尽量避免内存溢出。
*/
import java.io.*;

class FileDemo3 {
    public static void main(String[] args) {
        File dir = new File("e:\\life");
        showDir(dir, 0);

        // toBin(6);
        // int n = getSum(80000); // Exception in thread "main" java.lang.StackOverflowError
        // System.out.println("n=" + n);
    }

    public static void showDir(File dir, int level) {
        System.out.println(printSpaceByLevel(level) + dir);

        level++;
        File[] files = dir.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                showDir(files[i], level);
            } else {
                System.out.println(printSpaceByLevel(level) + files[i]);
            }
        }
    }

    public static String printSpaceByLevel(int level) {
        StringBuffer sbSpace = new StringBuffer();
        sbSpace.append("|--");
        for (int i = 0; i < level; i++) {
            sbSpace.insert(0, "|  ");
        }
        return sbSpace.toString();
    }

    public static int getSum(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n + getSum(n-1);
        }
    }

    public static void toBin(int num) {
        /*
        while (num > 0) {
            System.out.println(num % 2);
            num = num / 2;
        }
        */
        if(num > 0) {
            toBin(num / 2);
            System.out.println(num % 2);
        }
    }
}

 

posted on 2021-12-22 21:57  平凡力量  阅读(26)  评论(0编辑  收藏  举报