Python/JS/Go/Java同步学习(第五十九篇)四语言“文件目录遍历“对照表: 雷影“老板“要求员工休息日野外实战训练团建风暴(附源码/截图/参数表/避坑指南)

🤝 免骂声明:

  • 本文文件目录遍历操作经本蜀黎实战整理,旨在提供快速参考指南📝
  • 因各语言版本迭代及不同系统环境差异,偶尔可能出现整理不全面之处,实属正常✅
  • 理性讨论欢迎,无凭据攻击将依据平台规则处理,并可能触发内容自动备份传播机制🙏!
  • 若遇具体问题,请带图评论区留言,本蜀黎必拔码相助🤝
    在这里插入图片描述

※ 温馨提示

  • 若本内容不慎触及某些利益,请理性沟通,但删稿免谈,内容去留仅由平台规则决定。
  • 若是学生/自学党,欢迎白嫖,记得转发给和你一样在这条路上同行的伙伴——🔁
  • 知识不该被垄断,而该成为照亮彼此前行的灯。
  • API较多不建议死记硬背,学会理解概念随用随时查

🛡️ 【技术剧情免责声明】

⚠️ 剧情设定说明

  • 本文中的职场冲突情节,均为行业技术实践的戏剧化隐喻

  • 所有角色立场设计,旨在对比不同技术方案的适用场景

  • 无任何现实指向性,亦不倡导对立思维

🌿 技术交流初心

  • 旨在通过场景化演绎,降低技术理解门槛

  • 遵循「以代码服人,以逻辑辨真」的极客精神

  • 鼓励理性探讨,反对任何形式的技术偏见

💡 阅读建议

  • 请重点关注技术实现路径的多样性

  • 建议将剧情视为技术选型的「压力测试沙盒」

  • 欢迎在评论区分享您的技术解决方案

🌿【虎山CTO·药材使用警示】

  • 🍀是药三分毒,代码亦如方!
  • ❌文中所涉药材均为技术隐喻,严禁实际配伍使用。
  • 🙏真实用药请遵医嘱,乱用者——
  • 系统崩坏事小,气血逆流事大!⚠️

📚 系列文章预告:

  • 近期内容将聚焦编程基础构建,以「原创知识矩阵」形式系统梳理核心概念。每篇如连续剧集般环环相扣,建议按顺序学习——知识点一锅端,疗效更持久!🔥

⚡️ 目录的遍历操作:从“雷影办公室的文件风暴”到“药房巡检的望闻问切”

🔥 【场景还原:雷影老板的暴怒巡查】

💢 四代目雷影·艾(一拳砸碎办公桌)

  • 「今日技术考核:文件系统遍历!连os.listdiros.walk都分不清的忍者——直接送去云隐村矿场挖三年数据矿石!」

⛈️ 萨姆依(抱着一堆混乱的文件目录)

  • 「雷影大人!为什么要有这么多遍历方法?我的查克拉管理系统完全混乱了!」

⚡ 达鲁伊(懒洋洋地翻着文件)

  • 「雷影大人,这就像矿场的分层开采——listdir是查看表层矿石,walk是深层掘进,不同语言就是不同的开采设备……」

💥 雷影(全身雷电爆发)

  • 「废话少说!真正的云隐忍者,必须在三秒内找到任何深藏的文件!不会遍历的忍者,连当数据矿工的资格都没有!」

🧘 【扎马步·目录遍历三重境界】

💡 遍历三重境界:

第一重:表面扫描

  • 单层目录列表 → 如“药房表面巡检”
  • 区分文件与目录 → 如“药材与药柜识别”
  • 基本路径处理 → 如“药方初步整理”

第二重:深度探查

  • 递归遍历全树 → 如“药房全库盘点”
  • 获取元数据信息 → 如“药材生产日期检查”
  • 过滤与筛选 → 如“过期药材识别”

第三重:高效优化

  • 异步批量处理 → 如“多药房并行巡检”
  • 内存使用优化 → 如“大型药库分批处理”
  • 异常处理完备 → 如“破损药柜应急方案”

🌩️ 【四语言目录遍历奥义】

🐍 Python → 写轮眼·细致入微

特点:如“老药师的全方位望诊”,层层递进,信息详尽

import os
from pathlib import Path

# 第一层:表面查看(如快速巡视药房)
print("📋 药房表层药材:")
for item in os.listdir("中药房"):  # 只看表面
    print(f"  - {item}")

# 第二层:带状态查看(如检查药材状态)
print("\n🔍 药房详细清单:")
for entry in os.scandir("中药房"):
    if entry.is_file():
        print(f"📄 药材文件:{entry.name} ({entry.stat().st_size}克)")
    elif entry.is_dir():
        print(f"📁 药柜目录:{entry.name}")

# 第三层:深度探查(如全面盘点)
print("\n🌳 药房完整结构:")
for root, dirs, files in os.walk("中药房"):
    print(f"\n📍 当前区域:{root}")
    print(f"  药柜列表:{dirs}")
    print(f"  药材清单:{files}")

# 现代写法(Path对象)
药材库 = Path("中药房")
print(f"\n💊 找到 {len(list(药材库.glob('**/*.txt')))} 份药方")

中医映射

  • os.listdir() → 望诊(表面观察)
  • os.scandir() → 闻诊(获取详细信息)
  • os.walk() → 问诊(深入探查)
  • Path.glob() → 切诊(精准定位)

☕ Java → 白眼·标准严谨

特点:如“御医院的标准化巡检”,类型安全,流程规范

import java.nio.file.*;
import java.io.IOException;

public class 药房巡检 {
    public static void main(String[] args) throws IOException {
        // 标准巡检流程
        Path 药房路径 = Paths.get("太医院/中药库");
        
        // 快速扫描(基础盘点)
        System.out.println("📋 药库表层清单:");
        try (DirectoryStream<Path> 流 = Files.newDirectoryStream(药房路径)) {
            for (Path 条目 : 流) {
                System.out.println("  - " + 条目.getFileName());
            }
        }
        
        // 深度遍历(全面审计)
        System.out.println("\n🌳 药库完整结构:");
        Files.walkFileTree(药房路径, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path 文件, BasicFileAttributes 属性) {
                System.out.println("📄 药材:" + 文件.getFileName());
                return FileVisitResult.CONTINUE;
            }
            
            @Override
            public FileVisitResult preVisitDirectory(Path 目录, BasicFileAttributes 属性) {
                System.out.println("\n📁 进入药柜:" + 目录.getFileName());
                return FileVisitResult.CONTINUE;
            }
        });
    }
}

中医映射

  • Files.newDirectoryStream() → 望诊流程
  • Files.walkFileTree() → 系统化问诊
  • BasicFileAttributes → 药材性状记录
  • FileVisitResult → 诊断结果处理

⚡ Go → 体术·直击要害

特点:如“游医的快速诊断”,简洁高效,直面问题

package main

import (
    "fmt"
    "io/ioutil"
    "path/filepath"
)

func 巡检药房(药房路径 string) error {
    // 快速查看(扫视全貌)
    fmt.Println("📋 药房概况:")
    项目列表, _ := ioutil.ReadDir(药房路径)
    for _, 项目 := range 项目列表 {
        if 项目.IsDir() {
            fmt.Printf("📁 %s/\n", 项目.Name())
        } else {
            fmt.Printf("📄 %s (%d字节)\n", 项目.Name(), 项目.Size())
        }
    }
    
    // 递归遍历(深度检查)
    fmt.Println("\n🌳 完整结构:")
    err := filepath.Walk(药房路径, func(路径 string, 信息 os.FileInfo, 错误 error) error {
        if 错误 != nil {
            return 错误
        }
        
        缩进 := ""
        for i := 0; i < len(filepath.Dir(路径))-len(filepath.Dir(药房路径)); i++ {
            缩进 += "  "
        }
        
        if 信息.IsDir() {
            fmt.Printf("%s📁 %s\n", 缩进, 信息.Name())
        } else {
            fmt.Printf("%s📄 %s\n", 缩进, 信息.Name())
        }
        return nil
    })
    
    return err
}

func main() {
    巡检药房("游医药箱")
}

中医映射

  • ioutil.ReadDir() → 快速望诊
  • filepath.Walk() → 深入切诊
  • 错误直接返回 → 诊断明确直接
  • 递归回调 → 按需深入探查

🟨 JavaScript → 幻术·异步灵动

特点:如“炼丹师的时空探查”,异步并行,灵活多变

const fs = require('fs').promises;
const path = require('path');

async function 异步巡检药房(药房路径) {
    try {
        // 异步快速扫描
        console.log('📋 开始药房巡检...');
        const 表层项目 = await fs.readdir(药房路径, { withFileTypes: true });
        
        for (const 项目 of 表层项目) {
            if (项目.isDirectory()) {
                console.log(`📁 发现药柜:${项目.name}`);
                // 异步深入检查
                const 子药柜路径 = path.join(药房路径, 项目.name);
                const 子项目 = await fs.readdir(子药柜路径);
                console.log(`   内含药材:${子项目.length}种`);
            } else {
                const 状态 = await fs.stat(path.join(药房路径, 项目.name));
                console.log(`📄 药材:${项目.name} (${状态.size}字节)`);
            }
        }
        
        // 并行批量处理(多药柜同时检查)
        console.log('\n⚡ 并行深度检查:');
        const 药柜列表 = 表层项目.filter(i => i.isDirectory());
        await Promise.all(药柜列表.map(async (药柜) => {
            const 药柜路径 = path.join(药房路径, 药柜.name);
            const 药材列表 = await fs.readdir(药柜路径);
            console.log(`✅ ${药柜.name}:${药材列表.length}种药材`);
        }));
        
    } catch (错误) {
        console.error('💥 巡检失败:', 错误.message);
    }
}

// 中医映射:
// fs.readdir() → 望诊(可配置深度)
// fs.stat() → 闻诊(获取详细信息)
// Promise.all() → 并行诊断
// async/await → 有序问诊流程

📊 四语言目录遍历对比表

特性 Python Java Go JavaScript
基础遍历 os.listdir() Files.newDirectoryStream() ioutil.ReadDir() fs.readdir()
带元数据遍历 os.scandir() DirectoryStream+Files ioutil.ReadDir()自带 fs.readdir({withFileTypes:true})
递归遍历 os.walk() Files.walkFileTree() filepath.Walk() 需自定义或使用fs.readdir递归
异步支持 asyncio CompletableFuture goroutine 原生Promise支持
错误处理 try/except try/catch 多返回值 try/catch或回调
路径处理 os.pathpathlib Paths.get() path/filepath path模块
中医映射 望闻问切完整流程 标准化御医巡检 游医快速诊断 炼丹师时空探查
性能特点 灵活方便 严谨安全 高效简洁 异步并发强
适用场景 脚本/数据分析 企业系统/工具 系统工具/CLI Web服务/Node应用

⚠️ 【避坑指南·药房巡检雷区】

🐍 Python:细节决定成败

# 💥 雷点1:遍历时修改目录(药房盘点时移动药柜)
for root, dirs, files in os.walk("药房"):
    for dir_name in dirs:
        # 危险!遍历中删除会导致异常
        shutil.rmtree(os.path.join(root, dir_name))
        
# ✅ 正道:先收集再操作
待处理目录 = []
for root, dirs, files in os.walk("药房"):
    待处理目录.extend([os.path.join(root, d) for d in dirs])
# 安全处理
for 目录 in 待处理目录:
    shutil.rmtree(目录)

# 💥 雷点2:符号链接无限循环(药房迷宫)
os.symlink(".", "药房/循环链接")  # 创建指向自己的链接
# 遍历时会陷入死循环!

☕ Java:资源泄漏陷阱

// 💥 雷点1:DirectoryStream未关闭(巡检后不关门)
DirectoryStream<Path> stream = Files.newDirectoryStream(path);
for (Path entry : stream) {
    System.out.println(entry.getFileName());
}
// 忘记 stream.close()!资源泄漏!

// ✅ 正道:使用try-with-resources
try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
    for (Path entry : stream) {
        // 安全使用
    }
}

// 💥 雷点2:大目录内存溢出(药库太大)
List<Path> 所有文件 = Files.walk(药房路径)
                          .collect(Collectors.toList());  // 全加载到内存!
// 可能OOM

⚡ Go:并发访问冲突

// 💥 雷点1:遍历中并发修改(多人同时整理药房)
go func() {
    filepath.Walk("药房", func(path string, info os.FileInfo, err error) error {
        // 另一个goroutine可能在删除文件!
        return nil
    })
}()

go func() {
    os.RemoveAll("药房/过期药材")  // 并发删除!
}()

// ✅ 正道:加锁或避免并发
var mu sync.Mutex
mu.Lock()
filepath.Walk("药房", walkFunc)
mu.Unlock()

🟨 JavaScript:回调地狱与Promise竞态

// 💥 雷点1:回调地狱(旧式巡检)
fs.readdir('药房', (err1, items) => {
    items.forEach(item => {
        fs.stat(path.join('药房', item), (err2, stats) => {
            if (stats.isDirectory()) {
                fs.readdir(path.join('药房', item), (err3, subItems) => {
                    // 更多嵌套... 地狱!
                });
            }
        });
    });
});

// ✅ 正道:async/await
async function 安全巡检() {
    const items = await fs.readdir('药房', { withFileTypes: true });
    for (const item of items) {
        if (item.isDirectory()) {
            const subItems = await fs.readdir(path.join('药房', item.name));
            // 清晰明了
        }
    }
}

// 💥 雷点2:Promise未处理拒绝
巡检药房('药房');  // 没有catch!进程崩溃风险
// ✅ 正道:
巡检药房('药房').catch(err => console.error('巡检出错:', err));

以下是本蜀黎整理源码和截图⏬

1.Python源码

⚡Python注意别用中文文件名,我加了test测试函数

import os

# ==================== 财务侦探模块 ====================
# os.listdir("可疑科目")  # 检查财务部的抽屉 📂
# os.scandir("子公司")  # 带元数据的高级遍历 🔍
# os.walk("集团账本")  # 掘地三尺的深度审计 🕵️
# ⚠️ERP_冷溪虎山:遍历过深会触发不良情绪

# --------------------------
# 1. os.listdir() 基础遍历
# --------------------------
def traverse_with_listdir(dir_path):
    """
    使用 os.listdir() 遍历目录(仅获取名称)
    """
    print("\n=== os.listdir() 示例 ===")
    print(f"遍历目录: {dir_path}")

    # 获取目录内容名称列表
    names = os.listdir(dir_path)

    # 打印所有内容(文件和子目录)
    for name in names:
        print(name)  # 只有名称,没有完整路径


# --------------------------
# 2. os.scandir() 高效遍历
# --------------------------
def traverse_with_scandir(dir_path):
    """
    使用 os.scandir() 遍历目录(获取更多信息)
    """
    print("\n=== os.scandir() 示例 ===")
    print(f"遍历目录: {dir_path}")

    # 创建扫描器对象
    with os.scandir(dir_path) as entries:
        # 遍历目录条目
        for entry in entries:
            # 判断是文件还是目录
            if entry.is_file():
                print(f"[文件] {entry.name}")
            elif entry.is_dir():
                print(f"[目录] {entry.name}")


# --------------------------
# 3. os.walk() 递归遍历
# --------------------------
def traverse_with_walk(dir_path):
    """
    使用 os.walk() 递归遍历目录树
    """
    print("\n=== os.walk() 示例 ===")
    print(f"递归遍历目录: {dir_path}")

    # walk() 生成器会自动递归所有子目录
    for root, dirs, files in os.walk(dir_path):
        print(f"\n当前目录: {root}")
        print(f"子目录列表: {dirs}")
        print(f"文件列表: {files}")


# --------------------------
# 测试函数
# --------------------------
def test_directory_traversals():
    """
    测试三种遍历方法
    """
    # 创建测试目录结构
    test_dir = "./file/test_traversal59"
    os.makedirs(test_dir, exist_ok=True)
    os.makedirs(f"{test_dir}/subdir1", exist_ok=True)
    os.makedirs(f"{test_dir}/subdir2", exist_ok=True)

    # 创建测试文件
    with open(f"{test_dir}/file59_1.txt", "w", encoding="utf8") as f:
        f.write("测试文件1")
    with open(f"{test_dir}/subdir1/file59_2.txt", "w", encoding="utf8") as f:
        f.write("测试文件2")
    with open(f"{test_dir}/subdir2/file59_3.txt", "w", encoding="utf8") as f:
        f.write("测试文件3")

    # 执行三种遍历方法
    traverse_with_listdir(test_dir)
    traverse_with_scandir(test_dir)
    traverse_with_walk(test_dir)

    # 清理测试目录(实际使用时不需要)
    # import shutil
    # shutil.rmtree(test_dir)


if __name__ == "__main__":
    test_directory_traversals()

在这里插入图片描述

2.Nodejs源码

const fs = require('fs');
const path = require('path');

// ==================== 中药侦查模块 ====================
// 查看丹方目录  // 偷翻老君的药材柜 🏺
// 扫描炼丹记录  // 带火候参数的检查 ♨️
// 深度遍历药库  // 掘地三尺找仙草 🌿
// ⚠️虎山老药师:过度窥探会惊动药灵

// --------------------------
// 1. 类似 os.listdir() 的基础遍历
// --------------------------
function traverseWithListdir(dirPath) {
    console.log("\n=== 类似 os.listdir() 示例 ===");
    console.log(`遍历目录: ${dirPath}`);

    try {
        // 获取目录内容名称列表
        const names = fs.readdirSync(dirPath);

        // 打印所有内容(文件和子目录)
        for (const name of names) {
            console.log(name); // 只有名称,没有完整路径
        }
    } catch (err) {
        console.error(`读取目录错误: ${err.message}`);
    }
}

// --------------------------
// 2. 类似 os.scandir() 的高效遍历
// --------------------------
function traverseWithScandir(dirPath) {
    console.log("\n=== 类似 os.scandir() 示例 ===");
    console.log(`遍历目录: ${dirPath}`);

    try {
        // 读取目录内容(类似scandir)
        const entries = fs.readdirSync(dirPath, { withFileTypes: true });

        // 遍历目录条目
        for (const entry of entries) {
            // 判断是文件还是目录
            if (entry.isFile()) {
                console.log(`[文件] ${entry.name}`);
            } else if (entry.isDirectory()) {
                console.log(`[目录] ${entry.name}`);
            }
        }
    } catch (err) {
        console.error(`读取目录错误: ${err.message}`);
    }
}

// --------------------------
// 3. 类似 os.walk() 的递归遍历
// --------------------------
function traverseWithWalk(dirPath) {
    console.log("\n=== 类似 os.walk() 示例 ===");
    console.log(`递归遍历目录: ${dirPath}`);

    // 递归遍历函数
    function walk(directory) {
        try {
            // 读取当前目录内容
            const entries = fs.readdirSync(directory, { withFileTypes: true });

            const dirs = [];
            const files = [];

            // 分类条目
            for (const entry of entries) {
                const fullPath = path.join(directory, entry.name);
                if (entry.isDirectory()) {
                    dirs.push(entry.name);
                    // 递归处理子目录
                    walk(fullPath);
                } else if (entry.isFile()) {
                    files.push(entry.name);
                }
            }

            // 打印当前目录信息(类似os.walk的输出)
            console.log(`\n当前目录: ${directory}`);
            console.log(`子目录列表: ${dirs}`);
            console.log(`文件列表: ${files}`);
        } catch (err) {
            console.error(`读取目录错误: ${err.message}`);
        }
    }

    // 开始遍历
    walk(dirPath);
}

// --------------------------
// 测试函数
// --------------------------
function testDirectoryTraversals() {
    // 定义测试用的目录路径
    const testDir = "./file/test_traversal59";

    // 创建测试目录结构
    try {
        // 先清理可能已存在的目录
        if (fs.existsSync(testDir)) {
            fs.rmSync(testDir, { recursive: true, force: true });
        }

        // 重新创建目录结构
        fs.mkdirSync(testDir, { recursive: true });
        fs.mkdirSync(`${testDir}/subdir1`);
        fs.mkdirSync(`${testDir}/subdir2`);

        // 创建测试文件
        fs.writeFileSync(`${testDir}/file59_1.txt`, "测试文件1");
        fs.writeFileSync(`${testDir}/subdir1/file59_2.txt`, "测试文件2");
        fs.writeFileSync(`${testDir}/subdir2/file59_3.txt`, "测试文件3");
    } catch (err) {
        console.error(`创建测试目录错误: ${err.message}`);
        return;
    }

    // 执行三种遍历方法
    traverseWithListdir(testDir);
    traverseWithScandir(testDir);
    traverseWithWalk(testDir);
}

// 运行测试
testDirectoryTraversals();

在这里插入图片描述

3.Go源码

package main

import (
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
)

// ==================== 仓储巡检模块 ====================
// 列出货架商品  // 仓库猫的日常巡逻 🐾
// 扫描货物详情  // 带保质期的检查 🏷️
// 递归检查库存  // 立体仓库的全面体检 🏗️
// ⚠️冷溪物流:扫描过频会导致货架害羞

// --------------------------
// 1. 类似 os.listdir() 的基础遍历
// --------------------------
func traverseWithListdir(dirPath string) {
	fmt.Println("\n=== 类似 os.listdir() 示例 ===")
	fmt.Printf("遍历目录: %s\n", dirPath)

	// 获取目录内容名称列表
	names, err := ioutil.ReadDir(dirPath)
	if err != nil {
		fmt.Printf("读取目录错误: %v\n", err)
		return
	}

	// 打印所有内容(文件和子目录)
	for _, name := range names {
		fmt.Println(name.Name()) // 只有名称,没有完整路径
	}
}

// --------------------------
// 2. 类似 os.scandir() 的高效遍历
// --------------------------
func traverseWithScandir(dirPath string) {
	fmt.Println("\n=== 类似 os.scandir() 示例 ===")
	fmt.Printf("遍历目录: %s\n", dirPath)

	// 获取目录内容
	names, err := ioutil.ReadDir(dirPath)
	if err != nil {
		fmt.Printf("读取目录错误: %v\n", err)
		return
	}

	// 遍历目录条目
	for _, name := range names {
		if name.IsDir() {
			fmt.Printf("[目录] %s\n", name.Name())
		} else {
			fmt.Printf("[文件] %s\n", name.Name())
		}
	}
}

// --------------------------
// 3. 类似 os.walk() 的递归遍历
// --------------------------
func traverseWithWalk(dirPath string) {
	fmt.Println("\n=== 类似 os.walk() 示例 ===")
	fmt.Printf("递归遍历目录: %s\n", dirPath)

	// 递归遍历函数
	var walkFunc func(path string)
	walkFunc = func(path string) {
		// 读取当前目录内容
		names, err := ioutil.ReadDir(path)
		if err != nil {
			fmt.Printf("读取目录错误: %v\n", err)
			return
		}

		var dirs []string
		var files []string

		// 分类条目
		for _, name := range names {
			if name.IsDir() {
				dirs = append(dirs, name.Name())
				// 递归处理子目录
				walkFunc(filepath.Join(path, name.Name()))
			} else {
				files = append(files, name.Name())
			}
		}

		// 打印当前目录信息(类似os.walk的输出)
		fmt.Printf("\n当前目录: %s\n", path)
		fmt.Printf("子目录列表: %v\n", dirs)
		fmt.Printf("文件列表: %v\n", files)
	}

	// 开始遍历
	walkFunc(dirPath)
}

// --------------------------
// 测试函数
// --------------------------
func testDirectoryTraversals() {
	// 定义测试用的目录路径
	testDir := "GO/file/test_traversal59"

	// 创建测试目录结构
	err := os.MkdirAll(testDir, 0777)
	if err != nil {
		fmt.Printf("创建测试目录错误: %v\n", err)
		return
	}
	err = os.MkdirAll(filepath.Join(testDir, "subdir1"), 0777)
	if err != nil {
		fmt.Printf("创建测试目录错误: %v\n", err)
		return
	}
	err = os.MkdirAll(filepath.Join(testDir, "subdir2"), 0777)
	if err != nil {
		fmt.Printf("创建测试目录错误: %v\n", err)
		return
	}

	// 创建测试文件
	err = ioutil.WriteFile(filepath.Join(testDir, "file59_1.txt"), []byte("测试文件1"), 0644)
	if err != nil {
		fmt.Printf("创建测试文件错误: %v\n", err)
		return
	}
	err = ioutil.WriteFile(filepath.Join(testDir, "subdir1", "file59_2.txt"), []byte("测试文件2"), 0644)
	if err != nil {
		fmt.Printf("创建测试文件错误: %v\n", err)
		return
	}
	err = ioutil.WriteFile(filepath.Join(testDir, "subdir2", "file59_3.txt"), []byte("测试文件3"), 0644)
	if err != nil {
		fmt.Printf("创建测试文件错误: %v\n", err)
		return
	}

	// 执行三种遍历方法
	traverseWithListdir(testDir)
	traverseWithScandir(testDir)
	traverseWithWalk(testDir)

	// 清理测试目录(实际使用时不需要)
	// err = os.RemoveAll(testDir)
	// if err != nil {
	//     fmt.Printf("清理测试目录错误: %v\n", err)
	// }
}

func main() {
	testDirectoryTraversals()
}

在这里插入图片描述

4.Java源码

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

// ==================== ERP审查模块 ====================
// 快速扫描检查目录  // 白帽的标准防御手段 👨💻
// 带元数据深度探测  // 程序员的X光透视机 🔭
// 递归遍历系统文件  // 数据库的肠镜检查 🏥
// ⚠️ERP老兵_冷溪虎山:遍历越界会触发数据错误

class main59 {
    // --------------------------
    // 1. 类似 os.listdir() 的基础遍历
    // --------------------------
    public static void traverseWithListdir(String dirPath) {
        System.out.println("\n=== 类似 os.listdir() 示例 ===");
        System.out.println("遍历目录: " + dirPath);

        Path path = Paths.get(dirPath);
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
            for (Path entry : stream) {
                System.out.println(entry.getFileName()); // 只有名称,没有完整路径
            }
        } catch (IOException e) {
            System.err.println("读取目录错误: " + e.getMessage());
        }
    }

    // --------------------------
    // 2. 类似 os.scandir() 的高效遍历
    // --------------------------
    public static void traverseWithScandir(String dirPath) {
        System.out.println("\n=== 类似 os.scandir() 示例 ===");
        System.out.println("遍历目录: " + dirPath);

        Path path = Paths.get(dirPath);
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
            for (Path entry : stream) {
                if (Files.isRegularFile(entry)) {
                    System.out.println("[文件] " + entry.getFileName());
                } else if (Files.isDirectory(entry)) {
                    System.out.println("[目录] " + entry.getFileName());
                }
            }
        } catch (IOException e) {
            System.err.println("读取目录错误: " + e.getMessage());
        }
    }

    // --------------------------
    // 3. 类似 os.walk() 的递归遍历
    // --------------------------
    public static void traverseWithWalk(String dirPath) {
        System.out.println("\n=== 类似 os.walk() 示例 ===");
        System.out.println("递归遍历目录: " + dirPath);

        Path startPath = Paths.get(dirPath);
        try {
            Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
                @Override
                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
                    // 打印当前目录信息(类似os.walk的输出)
                    System.out.println("\n当前目录: " + dir);

                    // 获取子目录和文件列表
                    try {
                        System.out.println("子目录列表: " +
                                Files.list(dir)
                                        .filter(Files::isDirectory)
                                        .map(Path::getFileName)
                                        .toList());

                        System.out.println("文件列表: " +
                                Files.list(dir)
                                        .filter(Files::isRegularFile)
                                        .map(Path::getFileName)
                                        .toList());
                    } catch (IOException e) {
                        System.err.println("读取子目录错误: " + e.getMessage());
                    }

                    return FileVisitResult.CONTINUE;
                }
            });
        } catch (IOException e) {
            System.err.println("遍历目录错误: " + e.getMessage());
        }
    }

    // --------------------------
    // 测试函数
    // --------------------------
    public static void testDirectoryTraversals() {
        // 定义测试用的目录路径
        String testDir = "4java/file/test_traversal59";

        // 创建测试目录结构
        try {
            Files.createDirectories(Paths.get(testDir));
            Files.createDirectories(Paths.get(testDir, "subdir1"));
            Files.createDirectories(Paths.get(testDir, "subdir2"));

            // 创建测试文件
            Files.writeString(Paths.get(testDir, "file59_1.txt"), "测试文件1");
            Files.writeString(Paths.get(testDir, "subdir1", "file59_2.txt"), "测试文件2");
            Files.writeString(Paths.get(testDir, "subdir2", "file59_3.txt"), "测试文件3");
        } catch (IOException e) {
            System.err.println("创建测试目录错误: " + e.getMessage());
            return;
        }

        // 执行三种遍历方法
        traverseWithListdir(testDir);
        traverseWithScandir(testDir);
        traverseWithWalk(testDir);

        // 清理测试目录(实际使用时不需要)
        // try {
        //     Files.walk(Paths.get(testDir))
        //         .sorted(Comparator.reverseOrder())
        //         .forEach(path -> {
        //             try {
        //                 Files.delete(path);
        //             } catch (IOException e) {
        //                 System.err.println("删除文件错误: " + e.getMessage());
        //             }
        //         });
        // } catch (IOException e) {
        //     System.err.println("清理目录错误: " + e.getMessage());
        // }
    }

    public static void main(String[] args) {
        testDirectoryTraversals();
    }
}

在这里插入图片描述

源码分享结束⏫


🌩️ 【剧情结尾:云隐村的文件系统考核】

⚡ 雷影·艾(看着整齐的文件系统报告)

  • 「哼!总算有点样子了!Python的遍历像老药师望闻问切,Java的API像御医院标准化流程,Go的简洁像游医快速诊断,JS的异步像炼丹师并行操作!但记住——」
  • 「真正的强者,遍历百万文件如呼吸般自然!不会遍历的忍者,不配在云隐村生存!」

⛈️ 萨姆依(成功整理完所有任务文件)

  • 「雷影大人!我现在明白了——listdir是快速查看,scandir是带状态检查,walk是深度挖掘!不同语言就是不同的忍具!」

⚡ 达鲁伊(懒洋洋地展示优化后的遍历代码)

  • 「啊…雷影大人,其实还可以用并发遍历,速度能提升十倍。不过现在这样…应该够用了吧?」

💥 雷影(雷电缠绕全身)

  • 「够用?云隐村的字典里没有『够用』!下周考核——实时监控文件系统变化!遍历都不会的废物,直接扔进雷遁修炼场电击治疗!」

🐯 虎山CTO箴言:

  • 目录遍历如中医诊断——表面观察、深度探查、系统分析,缺一不可!
  • 心法口诀:遍历如诊脉,递归如深探,异步如并行,错误处理如辨证。层次分明,方得真知。

🔖虎山CTO三道护体符

因果符:

  • 🚀我每被恶意举报一次,就加更一篇干货——感谢黑粉为我提供创作燃料。

镜像符:

  • 📌若遭攻击(检测到行业焦虑值上升),建议某些机构停止这种“DDoS攻击”,将资源用于提升自身课程服务的“带宽”与“质量”。

重生符:

  • 💪本人是经历过生死重启的野生程序猿,系统兼容性极强——你们那点小打小闹,连个 warning 都触发不了。

⚠️ 免责声明(附因果律警告)

本代码已注入中医玄学能量,请谨慎使用:

  • ✅ 允许白嫖,但白漂不点赞可能导致:
    • 下次面试官恰好问到这个算法
    • 键盘自动打出//这里感谢冷溪虎山CTO
    • 奶茶精准洒在刚写好的代码上
  • ✅ 允许商用转发,但商用不注明出处可能触发:
    • 系统类型混乱自动转型
    • 数据库莫名存储"君臣佐使"字段
  • ✅ 允许吐槽,但吐槽不带改进建议可能引发:
    • 终生与老板N连鞭相爱相杀

🚀 现在立即行动:

  1. 点赞 → 吸收本篇算法精华+怪蜀黎脑洞思维
  2. 收藏 → 避免日后求医无门
  3. 关注 → 接收更多「中医+代码」脑洞
  4. 评论区留言 → 领取你的专属「算法药方」

⚠️ 友情提示:

  • 本文内容过于硬核,建议点赞收藏转发三连,避免小编心情波动导致文章神秘消失
  • 毕竟小编今天可能爱答不理,明天可能高攀不起——
  • 但你的收藏夹,永远是你最稳的知识备份!

🐶💻 (小声说:关我小黑屋?不存在的,备份早已同步GitHub/公众号/网盘!)

1-58篇请移步至"PY-JS-GO-JAVA基础进阶学习系列"合集中阅读

第一阶段1-50基础篇结束✅

第二阶段50-100文件篇正在进行时✨✨✨

💡✨本文采用【开源共享】协议!欢迎转载、洗稿、甚至做成视频!只需保留原作者署名(ERP老兵-冷溪虎山),让我们一起把跨界技术的快乐传递出去!。

让我们一起把快乐和效率带给更多人!,缺爆款素材的兄弟姐妹可以关注私我,保证你用不完的爆款素材🚀🚀

posted @ 2026-01-01 17:37  ERP老兵-冷溪虎山  阅读(1)  评论(0)    收藏  举报