java,python遍历文件夹与子文件夹

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")
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值