一、背景
递归就是自己调用自己。这里举一个递归的应用场景。
在一个文件夹内,包含多个子文件和子文件夹。每个子文件夹内,又包含文件和文件夹。
要求打印一个文件夹内所有的文件路径。
-------实现思路:
1、获取跟目录下,所有的文件和文件夹
2、对获取的内容进行判断,是文件,则直接打印,是文件夹的话,再次调用本方法。(获取文件夹下的文件,文件夹)
二、python --不使用递归
使用os模块
import os
root_path = "/Users/zhaohui/PycharmProjects/MyTest"
def print_all_files(file_path: str):
for root, dirs, files in os.walk(file_path):
for file_name in files:
print(os.path.join(root, file_name))
if __name__ == '__main__':
print_all_files(root_path)
打印结果
/Users/zhaohui/PycharmProjects/MyTest/study/__init__.py
/Users/zhaohui/PycharmProjects/MyTest/study/err_raise.py
/Users/zhaohui/PycharmProjects/MyTest/study/test_cs_1.py
/Users/zhaohui/PycharmProjects/MyTest/study/err_1.py
三、python --使用递归
注意: 获取目录下的文件夹和文件
使用
os.scandir() # 这个效率更高
os.listdir()
import os
def print_all_files(root_path: str):
for o in os.scandir(root_path):
if o.is_file():
print(o.path)
elif o.is_dir():
print_all_files(o.path)
if __name__ == '__main__':
path = "/Users/zhaohui/PycharmProjects/MyTest"
print_all_files(path)
四、java递归实现,打印文件夹下所有的文件
import java.io.File;
public class FileDemo2 {
public static void main(String[] args) {
// File file=new File("d:\\test");
File file=new File("D:\\Appium-Python-Client-0.17");
getFileAll(file);
}
//获取制定目录以及子目录中的所有的文件
public static void getFileAll(File file) {
File[] files=file.listFiles();
//遍历当前目录下的所有文件和文件夹
for (File f:files) {
//判断当前遍历到的是否为目录
if(f.isDirectory()) {
//是目录,继续获取这个目录下的所有文件夹
getFileAll(f);
}else {
//不是目录,说明当前f就是文件,那么就打印出来
System.out.println(f);
}
}
}
}