import java.io.File; public class Example1 { public static void main(String args[]) { Example1 example1 = new Example1(); File file = new File("../Homework"); example1.f(file, 1); } //indent是缩进 public void f(File file, int indent) { if (!file.exists()) throw new IllegalArgumentException("文件" + file + "不存在"); if (!file.isDirectory()) throw new IllegalArgumentException("文件" + file + "不是目录"); File[] files = file.listFiles(); for (File fil : files) { for (int i = 0; i < indent; i++) { System.out.print("|-"); } System.out.println(fil.getName()); if (fil.isDirectory()) f(fil, indent + 3); } } }
看老师的为什么还要file!=null,我感觉既然已经存在File数组中,就不会不存在了,这时还包括文件,有子文件的文件夹,空文件夹的情况。这时不论是哪一种都先打印出名字就好了,然后是文件夹的在递归(这时不用管是不是空的)。不知道想的对不对。。
也会有这样的情况。该目录下什么都没有,那么这时返回的数组长度就是0。那就没有东西可以打印了啊。
空文件夹的长度为0,空文件夹再递归的时候,file[]数组长度为0,相当于一个File实例,不过是一个文件夹。先打印出名字,因为数组中没存放任何东西,就不会再进行递归了。