Java - 每次for循环运行时缩进行

时间:2013-12-05 22:10:14

标签: java for-loop indentation

我正在编写一个方法来列出目录中的所有文件,但我无法弄清楚如何使每个子目录比最后一个子目录多一个选项卡。 这是我的代码:

private static void recurseDirectoryHelper(File rootDirectory){
    File[] list = rootDirectory.listFiles();
    if (rootDirectory.isDirectory()){
        for (int f = 0; f < list.length; f++){
            if (list[f].isFile()){
                System.out.println("\t" + list[f].getName());
                countFiles++;
            }
        }
        for (int d = 0; d < list.length; d++){
            if (list[d].isDirectory()){
                System.out.println("Subdir: " + list[d].getName());
                recurseDirectoryHelper(list[d]);
            }       
        }
    }
    //System.out.println("Total Files: " + countFiles + "\t" + "Total Directories: " + countDirs);
}

4 个答案:

答案 0 :(得分:1)

将另一个参数添加到名为count的函数中,如下所示:

private static void recurseDirectoryHelper(File rootDirectory, int count){

每次递归调用函数时,都会传递count + 1,如下所示:

recurseDirectoryHelper(list[d], count+1);

然后当你执行System.out.println时,你确切知道要做多少个标签。

答案 1 :(得分:1)

我只是在递归方法中添加一个tabSpace字符串参数,以避免在内部进行不必要的循环:

 private static void recurseDirectoryHelper(File rootDirectory, String tabSpace){

在第一次调用中,我会根据需要将tabSpace作为空字符串(“”)或单个制表符(“\ t”)传递,然后使用 - 在子目录的递归调用中,只需传递{{ 1}} as

tabSpace+"\t"

打印列表时,只需使用 recurseDirectoryHelper(list[d], ""); //<-- First call from outside recurseDirectoryHelper(list[d], tabSpace+"\t"); //<-- recursive calls 进行缩进:

tabSpace

答案 2 :(得分:0)

有第二个参数来存储方法递归的级别。当它第一次被调用时,它将为零。当您递归调用该方法时,请传入level + 1

打印时,使用level作为要打印的标签数量。

答案 3 :(得分:0)

private static void recurseDirectoryHelper(File rootDirectory, String indent){
    if (rootDirectory.isDirectory()){
        File[] list = rootDirectory.listFiles();
        for(File file : list) {
            if (file.isFile()){
                System.out.print(indent);
                System.out.println(file.getName());
            }
        }
        for(File file : list) {
            if (file.isDirectory()){
                System.out.print("Subdir: ");
                System.out.println(file.getName());
                recurseDirectoryHelper(file, indent + indent);
            }       
        }
    }
}