首先
在码代码前要知道一些相关知识:
- getName():
- 这是API文档里File类里关于getName()方法的解释。举个例子,如果目录是C:\\Intel\\Logs,调用此方法后返回的是Logs文件夹名。
-
ListFiles():
- 下面po的图是API文档的相关介绍。他把目标目录下的所有文件(包括文件和文件夹)都存在数组里。
- isDirectory()就是判断是不是目录,API文档是这样介绍的:
- 递归:
递归简单的说就是循环的调用自己。具体的可以搜一下比较权威的解释,这儿我就不献丑了。
然后
就是这个代码的思想:
- 简单的说就是写个获取文件的方法,然后在main里面调用一下就OK了。
详细的讲:在写方法的时候要写两个for循环一个if语句。第一个是循环空格,就是让目录显示的时候更有层次感;第二个循环就是循环调用自己,也就是递归。if语句主要是用来判断传进来的参数是不是目录,是目录就继续递归,不是就不执行。
其次
分解一下代码:
- 这是总的代码
public static void listF(File file,int level) { String str=""; for (int i = 0; i < level; i++) { str+=" "; } //file.getName() System.out.println(str+file.getName()); if(file.isDirectory()) { //得到file的所有文件和文件夹 File[] f=file.listFiles(); for(File f1:f) { listF(f1,level+1); } } }
- 下面这一段代码就是上面说的为了让输出的目录文件更有层感弄的循环。这个level怎么讲呢,通俗的讲就是一级一级的意思,就像大家打开C盘之后一个一个文件夹点下去,文件夹套文件夹,看截图,就是图片上的样子,传入0的意思就是从最边边开始:
String str=""; for (int i = 0; i < level; i++) { str+=" "; }
这个就是打印,循环一次打印一次。
System.out.println(str+file.getName());
这个就是主要部分,首先判断是不是目录,不是目录就没有继续递归的必要了,上面的getName已经把文件都打印出来了。只有判断是目录然后才能继续往下循环,调用自身算法继续判断此目录下是文件还是文件夹,文件夹的话继续循环,文件的话就跳出循环。
if(file.isDirectory()) { //得到file的所有文件和文件夹 File[] f=file.listFiles(); for(File f1:f) { listF(f1,level+1); } }
最后
没有了,就这样,不明白的留言。哈哈哈哈