遍历目录的三种方法

1 使用栈遍历目录

#使用栈遍历目录
#根节点  path = r"E:\python1901\chengxu"
#根节点先入栈
#判断栈是否为空
#出栈处理
#列举节点下所有的文件
#判断文件是否为目录,
    #若为目录,入栈处理
    #若不为目录,直接打印
import os

path = r"E:\python1901\chengxu"


def stackgetdir(path):
    stack = []
    # 根节点先入栈
    stack.append(path)
    # 判断栈是否为空
    while len(stack) > 0:
        # 出栈处理
        path = stack.pop()
        # 列举节点下所有的文件
        fileList = os.listdir(path)
        for filename in fileList:
            #拼接绝对路径
            abspath = os.path.join(path,filename)
            # 若为目录,入栈处理
            if os.path.isdir(abspath):
                print("目录",filename)
                stack.append(abspath)
            else:
        # 若不为目录,直接打印
                print("文件",filename)


stackgetdir(path)
2递归遍历目录
'''
递归遍历目录

'''
import os


path = r"E:\python1901\chengxu"

#1.列举当前路径下所有的文件
#2.拼接绝对路径
#3.判断是否为目录
    #4.若为目录 打印目录名 -->1
    #5.若不是目录 打印文件名

def getallfile(path):
    # 1.列举当前路径下所有的文件
    fileList = os.listdir(path)
    for filename in fileList:
        #拼接绝对路径
        abspath = os.path.join(path,filename)
        # 3.判断是否为目录
        if os.path.isdir(abspath):
            # 4.若为目录 打印目录名 -->1
            print("目录",filename)
            getallfile(abspath)
        else:
            # 5.若不是目录 打印文件名
            print("文件",filename)

print(getallfile(path))
3 队列方法
import os
import collections

path= r"E:\python1901\chengxu"

def getAllDirQU(path):
	queue = collections.deque()
	#进队
	queue.append(path)
	while len(queue) != 0:
		#出队数据
		dirPath = queue.popleft()
		#找出所有的文件
		fileList = os.listdir(dirPath)
		for fileName in fileList:
			#绝对路径
			fileAbsPath = os.path.join(dirPath, fileName)
			#判断是否是目录,是目录就进队,不是就打印
			if os.path.isdir(fileAbsPath):
				print("目录:", fileName)
				queue.append(fileAbsPath)
			else:
				print("普通文件:", fileName)

print(getAllDirQU(path))
在Java中,遍历目录下的文件可以使用以下三种方式: 1. File类的listFiles()方法 使用File类的listFiles()方法可以获取目录下的所有文件和子目录,返回一个File数组。我们可以遍历这个File数组,对于每一个文件,判断它是不是目录,如果是目录则递归调用listFiles()方法,否则就处理这个文件。 示例代码: ``` public static void listFiles(File dir) { File[] files = dir.listFiles(); for (File file : files) { if (file.isDirectory()) { listFiles(file); } else { // 处理文件 } } } ``` 2. Files类的walk()方法 Java 8引入了Files类,它提供了一些新的方法来处理文件系统中的文件。其中,walk()方法可以遍历目录下的所有文件和子目录,返回一个Stream<Path>对象。我们可以通过Stream的forEach()方法遍历所有的Path,对于每一个Path,判断它是不是目录,如果是目录则递归调用walk()方法,否则就处理这个文件。 示例代码: ``` public static void walkFiles(Path dir) throws IOException { Files.walk(dir) .filter(Files::isRegularFile) .forEach(file -> { // 处理文件 }); } ``` 3. Apache Commons IO库的FileUtils类 Apache Commons IO库是一个常用的Java工具库,它提供了大量的文件和流操作工具类。其中,FileUtils类提供了一个listFiles()方法,可以遍历目录下的所有文件和子目录,返回一个File数组。我们可以遍历这个File数组,对于每一个文件,判断它是不是目录,如果是目录则递归调用listFiles()方法,否则就处理这个文件。 示例代码: ``` public static void listFiles(File dir) { Collection<File> files = FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); for (File file : files) { if (file.isDirectory()) { listFiles(file); } else { // 处理文件 } } } ``` 总的来说,以上三种方式都可以用来遍历目录下的文件,具体使用哪一种方式可以根据实际情况来选择。其中,Files类的walk()方法可以使用Lambda表达式来处理文件,代码更加简洁。Apache Commons IO库的FileUtils类提供了很多常用的文件操作方法,也可以方便地遍历目录下的文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值