Java入门 2. 遍历文件夹 含递归应用与理解

要求:按如下层次打印

Documents/
  word/
    1.docx
    2.docx
    work/
      abc.doc
  ppt/
  other/
实现代码1
import java.io.File;
import java.io.IOException;

public class IO_Print {
    public static void main(String[] args) throws IOException {
        File currentDir = new File("C:\\java\\练习\\io-file\\test");
        System.out.println("Cann "+currentDir.getCanonicalPath());
        System.out.println("absolute "+currentDir.getAbsolutePath());
        System.out.println("Exist ?"+currentDir.isDirectory());
        System.out.println("==============");
        String s1 = "";
        int s0 = 0;
        listDir(currentDir.getCanonicalFile(),s1,s0);

        File test = new File(currentDir.getCanonicalFile(),"child");
        System.out.println(test.getAbsolutePath());

    }
    
    static void listDir(File dir,String s, int i) { // 增加一个字符串
        // TODO: 递归打印所有文件和子文件夹的内容
        File[] fs = dir.listFiles();
        if (fs != null) {
            for (File f : fs) {
                //System.out.println(s+f.getName()); // 打印当前夫文件夹名称); // 不能在这里打印否则遍历一次 加一次空格,应该放在条件下面
                if(f.isDirectory()){
                    System.out.println(s+f.getName()+" i = "+i);
                    //i = i + 1;
                    listDir(f,s+"  ",i+1); // 创建一个新的对象,而不是在原来的i上继续相加,保证此次遍历开始i都是相等
                }else {
                    System.out.println(s+f.getName()+" i = "+i);
                    //listDir(f,s,i); // 如果不是路径而是文件,s不再增加,直接同级输出
                }
            }
        }

    }
}

输出结果:

Document i = 0
  other i = 1
  ppt i = 1
  word i = 1
    1.docx i = 2
    2.docx i = 2
    work i = 2
      abc.docx i = 3

结果分析:这里关键是递归中增加String s 作为空字符串,同时若自己还是文件夹,递归使用

listDir(f,s+"  ",i+1); 

如果自己是文件名,则不用空格输出,这里重点是传入i +1 ,而不是 对i++赋值后把i传入,如果递归中,向以下方式写

i = i + 1;
listDir(f,s+"  ",i); //

输出结果为:会发现,同层文件夹i是不一样的,因为在递归中,i的值不断被增加。如果传入的是i+1,相当于形成了新的i+1新对象,每一个for循环中i都是一样的

Document i = 0
  other i = 1
  ppt i = 2
  word i = 3
    1.docx i = 4
    2.docx i = 4
    work i = 4
      abc.docx i = 5

你可能感兴趣的:(Java入门 2. 遍历文件夹 含递归应用与理解)