递归是什么
递归是指函数的定义中函数使用自身方法。即自己调用自己
例如下面:
// 求5的阶乘5!
int sum = 1;
for (int i = 1; i <= 5; i++) {
sum = sum * i;
}
System.out.println(sum);
我们通常会用到for循环,而在使用递归的时候,我们就可以很方便的写出结果
例如
// 求5!
public static int recurve(int i) {
if (i <= 1) {
return 1;
}
return i * recurve(i - 1);
}
我们可以看到两个代码段不同,但是结果是相同的,这就是递归的作用
那么,既然可以用for循环来求出结果,那么递归有什么用呢
当然是简化重复代码的操作次数啦
面对这种简单的代码,可能还看不出递归的优点,那我们换一个代码看看!
进入今天的主题《递归遍历本地文件》
遍历文件,我们首要的是需要知道Java中获取本地磁盘
import java.io.File;
File中有一个静态方法可以获取到本地磁盘
File.listRoots();
他返回了本地有多少个磁盘
知道了这个,我们就可以开始扫描操作了
话不多说,直接上代码
package com.demo.DeepFile;
import java.io.File;
import java.util.ArrayList;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class DeepFile {
private File[] RootList = File.listRoots();
private ArrayList<String> dirname = new ArrayList<>();
private ArrayList<String> filename = new ArrayList<>();
public DeepFile() {
}
public File[] getRootList() {
return this.RootList;
}
public void startDeepFile(File[] list) {
for (File parentRoot : list) {
if (parentRoot.listFiles() == null) {
this.filename.add(parentRoot.getName());
continue;
}
for (File children : parentRoot.listFiles()) {
if (children.listFiles() == null) {
this.filename.add(children.getName());
continue;
}
if (children.isDirectory()) {
this.dirname.add(children.getPath());
try {
startDeepFile(children.listFiles());
} catch (NullPointerException e) {
e.printStackTrace();
}
}
}
}
}
// 将文件写入到文本
public boolean writePath() {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
for (String dir : this.dirname) {
bw.write(dir);
bw.newLine();
bw.flush();
}
BufferedWriter fbw = new BufferedWriter(new FileWriter("b.txt"));
for (String file : this.filename) {
fbw.write(file);
fbw.newLine();
fbw.flush();
}
bw.close();
fbw.close();
} catch (IOException IOE) {
IOE.printStackTrace();
}
return true;
}
}