用的嵌套for循环。没有用到递归,最开始尝试递推,发现输出的格式不符合要求,可能需要动到函数外或函数本身
Topic source使用递归,优化了代码
public class Main4 {
public static void main(String[] args) throws IOException {
File currentDir = new File(".");
listDir(currentDir.getCanonicalFile());
}
//如果不指定参数,则使用当前目录,如果指定参数,则使用指定目录。
static void listDir(File dir) {
// TODO: 递归打印所有文件和子文件夹的内容
File[] files = dir.listFiles();
System.out.println(dir.getName() + File.separator);
for (File file : files) {
StringBuilder space = new StringBuilder(1024);
space.append(" ");
dirTools(file, space);
}
}
public static void dirTools(File file, StringBuilder space) {
if (file.isDirectory()) {// 目录
System.out.println(space + file.getName() + File.separator);
for (File subFile : file.listFiles()) {
space.append(" ");
dirTools(subFile, space);
space.delete(space.length() - 2, space.length());
}
} else {// 文件
System.out.println(space + file.getName());
}
}
- 1
Best of Me
// TODO: 递归打印所有文件和子文件夹的内容
File[] fs = dir.listFiles();
if (fs != null) {// 进入一级目录
for (File f : fs) {// 遍历一级目录,子目录增加上一级目录的2个缩进
for (String s = "";; s += " ") {
if (f.listFiles() != null) {
System.out.println(s + f.getName() + File.separator);
for (File subf : f.listFiles()) {// 下级文件夹赋值f
f = subf;
}
} else {
System.out.println(s + f.getName());
break;
}
}
}
}