• 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    上面代码的思路:
    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())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    上面的思路跟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")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    真正“搞”懂HTTP协议14之HTTP3
    CF1527D MEX Tree
    CPT-PLGA/FITC/Bodipy/Biotin聚乳酸共聚物/荧光素/生物素/Bodipy系列染料修饰顺铂的制备
    力扣:669. 修剪二叉搜索树,今日份快乐
    ElasticSearch7.3学习(二十五)----Doc value、query phase、fetch phase解析
    Idea创建springboot项目
    带头双向循环链表讲解-思路清晰+画图+代码实现
    ReactNative进阶(五):React Native与原生通信
    c#遍历文件重命名
    Linux系统管理技术手册——第25章 X窗口系统
  • 原文地址:https://blog.csdn.net/bitcarmanlee/article/details/126509133