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