我正在编写一个方法来列出目录中的所有文件,但我无法弄清楚如何使每个子目录比最后一个子目录多一个选项卡。 这是我的代码:
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);
}
答案 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);
}
}
}
}