1.遍历文件夹树形结构
我们经常需要针对目录的树形结构进行遍历,即遍历目录中的子文件夹与文件。如果子文件夹里面还包含有文件夹,则继续递归进行遍历。
2.java实现方案
先直接上代码
import java.io.*;
/**
* author: wanglei
* create: 2022-08-24
*/
public class ReadFiles {
private static void readDirectory(String path) {
File file = new File(path);
File[] files = file.listFiles();
for(File fs: files) {
String curpath = fs.getAbsolutePath();
String filename = fs.getName();
if (fs.isDirectory()) {
System.out.println(curpath + " is directory");
readDirectory(curpath);
} else {
System.out.println(curpath + " is file");
System.out.println("filename is: " + filename);
readFile(curpath);
System.out.println("**********\n");
}
}
}
public static void readFile(String filepath) {
try {
BufferedReader br = new BufferedReader(new FileReader(new File(filepath)));
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String path = "xxx";
readDirectory(path);
}
}
上面代码的思路:
1.首先调用listFiles方法,返回Files数组,包含当前目录下的所有目录与文件。注意在java中,File对象可以表示文件,也可以表示目录。
2.调用File对象的isDirectory方法,判断其是否为目录。
3.如果为目录,则主方法递归。
4.如果为文件,进行相应操作(示例中为读取文件的内容)。
3.python实现方案
3.1 使用listdir的方式
老规矩,上代码
def get_filelist(path):
filelist = os.listdir(path)
for f in filelist:
absolutepath = os.path.join(path, f)
if os.path.isdir(absolutepath):
print("dirname is: ", absolutepath)
get_filelist(absolutepath)
elif os.path.isfile(absolutepath):
print("filename is: ", absolutepath)
readfile(absolutepath)
print("******************\n")
def readfile(filename):
f = open(filename)
for line in f.readlines():
print(line.strip())
上面的思路跟java版本比较像
1.listdir(path)返回指定的文件夹包含的文件或文件夹名字列表。
2.判断是否为目录。如果为目录,主方法进行递归。
3.如果为文件,进行相应操作。
3.2 os.walk的方式
python中提供了walk方法,os.walk 的返回值是一个生成器(generator)。使用的时候我们不停遍历,可以获取生成器中的内容。对生成器每次遍历,获得的对象均为一个三元tuple(root, dirs, files)。其中
root是当前遍历的这个文件夹自己的地址。
dirs是一个list,里面是该文件夹中所有目录的名字,但是不包含子目录。
files也是一个list,里面是该文件夹中所有的文件,但是不包含子目录中的文件。
def walk_list(path):
for root, dirs, files in os.walk(path):
for d in dirs:
print("d is: ", os.path.join(root, d))
for f in files:
print("file is: ", os.path.join(root, f))
print("***********\n")