nodejs遍历一个目录下所有的文件

2023-05-16

    这个问题是我在实际中遇到的,意思很明确,一个目录下可能还嵌套子目录,我需要遍历出该目录下所有的文件,其实思路很简单,就是利用递归的思路,定义一个函数,传入一个目录路径参数,开始遍历该目录下的文件,如果遇到的是目录,则继续调用该函数,直到所有的目录遍历完成,结束。

    这里有个问题,就是我们需要通过这个函数得到所有的文件,而不仅仅是遍历一遍。遍历很好做,但是要通过这个函数返回一个数组,数组中就是所有的文件,这就有点麻烦了。遍历目录就是需要调用fs.readdirSync(path)函数。判断文件是目录还是文件,需要调用fs.statSync(path)。

    因为这里有递归调用,就是函数内部调用函数本身,所以函数本身的返回值很重要,思路可以这样,我们声明一个全局的数组,遍历的过程中,如果是文件就往数组中增加,如果是目录,则继续调用函数,直到所有目录遍历完成,数组就是我们要返回的结果。

var fs = require("fs");
var path = require("path");
var list = [];
function listFile(dir){
	var arr = fs.readdirSync(dir);
	arr.forEach(function(item){
		var fullpath = path.join(dir,item);
		var stats = fs.statSync(fullpath);
		if(stats.isDirectory()){
			listFile(fullpath);
		}else{
			list.push(fullpath);
		}
	});
	return list;
}

var res = listFile("D:/tools/eclipse2019/workspaces/webapp");
console.log(res);

    这种办法是可以得到结果的,但是有个问题是,我们需要定义一个全局的数组,最后返回。如果这个方法是公用的,我们怎么办呢?显然这个数组不能定义在函数体内,作为局部变量。否则在递归的时候,数组就发生了改变。其实问题在于,我们进行递归调用的时候,还需要把这个数组带入到函数中,这样,可以利用一个参数把数组带入,最后返回这个数组,初始数组默认为空[]。经过改变的函数如下所示:

     

    这样定义的方法就可以做到公用,我们可以暴露出去,给其他函数调用。 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nodejs遍历一个目录下所有的文件 的相关文章

  • 在 Node 中使用 Babel 导入与请求 [重复]

    这个问题在这里已经有答案了 我想在一个文件中导入一个类 use strict import models from model class Foo bar export default new Foo 当我使用导入时它有效 例如 impor
  • 如何在Electron WebView中连接到代理?

    因为我可以通过连接到免费代理服务器 或付费 目前用作电子 JS 解决方案作为桌面应用程序 代理列表服务器示例 http proxylist hidemyass com http proxylist hidemyass com 您可以使用 s
  • 由于 Chrome 修订,Firebase puppeteer PDF 功能超时

    我有一个 Firebase 函数来创建 PDF 文件 最近 由于 Chrome 修订版 而超时 我既不明白错误消息 也不明白出了什么问题 当我在 MacOS 下将其本地部署时 该功能有效 TimeoutError Timed out aft
  • 如何将 emscripten 浏览器输入法从 window.prompt 更改为更合理的输入法?

    我有一个 C 函数 一旦调用它就会消耗来自 stdin 的输入 使用 emscripten 将此函数导出到 javascript 会导致调用 window prompt 与浏览器提示交互确实是一项乏味的任务 首先 您一次只能粘贴一行 其次
  • 缺少节点-v59-linux-x64/grpc_node.node

    我正在尝试在我的服务器中使用 Firebase admin SDK 当我部署时 出现错误 我在 firebase admin node module 映射中缺少文件 node v59 linux x64 grpc node node 我在包
  • Node.js 重写 toString

    我试图覆盖我的对象的默认 toString 方法 这是代码和问题 function test this code 0 later on I will set these this name test prototype toString f
  • Should js 无法读取 null 的属性“should”

    我尝试在node中使用测试工具mocha 考虑以下测试场景 var requirejs require requirejs requirejs config Pass the top level main js index js requi
  • nodemon 安装错误“没有可用于超时的有效版本”

    尝试在全新的节点项目中安装 nodemon 时出现此错误 我创建了一个名为 my project 的空白文件夹 然后 在其中 我执行了创建一个 package json 文件 npm init f 然后当尝试运行时 npm install
  • 下载中带有文件名的 NodeJS sendFile

    我尝试使用以下代码将文件发送给客户端 router get get myfile function req res next res sendFile other file name dat 它工作正常 但当用户从以下网址下载此文件时我需要
  • Plesk Windows 部署 Node.js

    我创建了一个以 Node js 作为后端的 Angular 项目 这是服务器文件结构 Home directory httpdocs node hm dist browser folder server folder server js p
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • PrototypeJS 版本 1.6.0.2 覆盖 JSON.parse 和 JSON.stringify 并破坏 socket.io 功能

    基本上 socket io 使用 nativeJSON 来编码和解码数据包 而我的问题是我必须使用这个版本的原型来改变 JSON 行为 当我应该进入服务器时 如下所示 socket on event function a b c 我明白了s
  • 在node.js中生成密码重置令牌

    如何在 node js 中生成可在 url 中使用的密码重置令牌 我只需要生成令牌的方法 user reset password token user reset password expire expire date 编辑 这是解决方案
  • 部署的 Firebase 函数无法对外部 API 执行 HTTP GET? [复制]

    这个问题在这里已经有答案了 我正在尝试创建我的第一个 Google Home Action 其功能与我的 Amazon Alexa Skill 相同 此操作的工作方式是 您执行一个意图 然后调用我的代码中的一个函数 调用该函数时 它会向外部
  • 如何在node.js中的一定时间后强制解决承诺? [复制]

    这个问题在这里已经有答案了 我正在尝试从其 url 下载大量图像 然后在 Node js 中创建一个 PDF 文件 我正在使用图片下载器 https www npmjs com package image downloader模块下载承诺链
  • 猫鼬不创建索引

    我最近开始使用 Mongoose v 3 2 1 但我遇到了索引问题 我在我的模式 Schema path attr index true 上定义了几个索引 但它们不是在数据库中创建的 我在 shell 中运行 db collection
  • Node + Express 会话过期?

    我有一个 Express 应用程序 并且有一个登录表单 我需要持续 1 个月的会话 我是否将 maxAge 设置为一个月 以毫秒为单位 我让两台计算机保持打开状态并登录了 24 小时 当我回来时 两台计算机都已注销 我该如何解决这个问题 实
  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • Express URIError:无法解码参数

    当请求的参数包含时 我将 next js 与自定义 Express 服务器一起使用 它会导致此错误 URIError Failed to decode param faker at decodeURIComponent
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o

随机推荐

  • mysql中日期时间戳timestamp使用小结

    timestamp时间戳类型在mysql数据库中比较常见 xff0c 但是我们很容易忽视它的一些特征 xff0c 这个我在面试中吃过亏 xff0c 这里对他的一些用法和特点补充一下 也让自己加深印象 一般来说 xff0c 我们使用日期 xf
  • C++打印整数的八进制十进制十六进制以及打印逻辑布尔类型

    C 43 43 中打印一个整数的八进制 xff0c 十进制 xff0c 十六进制很方便 xff0c 无需定义别的函数或者方法 xff0c 直接通过关键字oct dec hex就可以 xff0c 另外打印布尔类型可以通过关键字boolalph
  • docker-compose构建mongodb容器实例

    docker compose可以一次性开启多个docker实例 xff0c 这一点比Dockerfile来构建docker容器要方便的多 docker compose的重点是对yml文件的配置 yml文件的配置需要注意的是严格控制缩进 需要
  • Mycat数据库中间件初体验

    Mycat是阿里开源的数据库中间件 xff0c 用java语言编写 xff0c 目前是1 x版本 xff0c 2 0版本正在研发中 Mycat支持的数据库很多 xff0c 目前常用的基本都包含了 xff0c mysql postgresql
  • docker使用遇到问题Got permission denied while trying to connect to the Docker daemon socket

    docker安装完成 xff0c 一般用户没有权限启动docker服务 xff0c 只能通过sudo来通过root用户权限来启动docker xff0c 此时对于一般用户而言 xff0c 需要执行docker ps或者docker imag
  • linuxmint下安装nvm来管理node版本

    nvm是一个node版本控制的工具 xff0c 他可以查看可以安装的node版本 xff0c 安装node xff0c 以及切换node版本 xff0c 传统的node安装 xff0c 我们是下载压缩包 xff0c 然后指定环境变量 xff
  • electron结合serialport插件开发硬件指令操作项目

    electron可以开发桌面系统 xff0c serialport包是node环境下连接串口设备的依赖 xff0c 如果是用electron做硬件检测项目 xff0c 需要考虑加入serialport包 xff0c 但是我们直接npm in
  • 无人驾驶小车调试笔记(七)-- 相机校准

    简介 xff1a 在第五节的内容中 xff0c 我们学习了使用rqt工具集观看摄像头视频流的方法 xff0c 细心的同学应该会发现camera node发布的视频数据中的图像有变形现象 xff0c 图像变形会导致直线不直 xff0c 部分区
  • npm install安装依赖报错 Error: spawn powershell.exe ENOENT解决办法

    在windows电脑上通过npm install安装 windows build tools的时候报如题所示的错误 xff0c 一般这种错误 xff0c 基本都是环境变量的问题 xff0c 我这里是因为在Path环境变量下找不到powers
  • nc工具测试tcp/udp协议

    nc是netcat的缩写 xff0c 在windows系统上 xff0c 需要单独下载安装 netcat在windows系统上安装很简单 xff0c 需要到如下页面https eternallybored org misc netcat x
  • Promise结合reduce构建顺序执行队列

    Promise是一个解决函数异步执行的对象 xff0c 有了这个对象 xff0c 我们可以构造异步执行的操作 Promise对象可以通过链式调用的方式进行异步操作 xff0c 语法如下 xff1a 如下代码 xff0c 是一个简单的异步方法
  • 使用U盘安装win7系统遇到“缺少所需的 CD/DVD 驱动器设备驱动程序”解决办法

    如题所示 xff0c 在使用U盘安装win7系统的时候 xff0c 遇到无法识别usb3 0驱动的问题 xff0c 表现如下图所示 xff1a 缺少所需的CD DVD 驱动器设备驱动程序 如果您具有软盘 CD DVD xff0c 或USB闪
  • windows系统删除无用的服务

    windows系统中 xff0c 经常会出现各种广告或者资讯的服务 xff0c 我们在服务列表里面还无法删除 xff0c 最多只能禁用 但是可以在命令行下面通过sc delete servicename的方式来删除 xff0c 例如 xff
  • vue构建electron桌面应用

    electron桌面应用 xff0c 可以结合前端框架vue使用 xff0c 而我们也可以通过vue工具来构建electron的应用 xff0c 这就需要我们全局安装vue cli xff0c 通过vue构建electron应用的脚手架 x
  • 局域网内不同网段的设备互相连接设置

    这个问题是我在实际中遇到的 xff0c 如下图所示 xff0c 我的主机有一个公司内网的IP xff0c 可以自动获取 xff0c 也可以设置固定IP xff0c 不管怎么样 xff0c 网段是172 16 0 xxx xff0c 不同的部
  • nodejs中exports与module.exports区别记录

    以前 xff0c 一直以为 xff0c 这两者其实差不多的意思 xff0c 直到今天偶然的一写 xff0c 发现两者还是有区别的 xff0c 我们暴露多个方法的示例 xff1a 这种方法 xff0c 肯定是没有问题的 xff0c 我们调用的
  • nodejs借助scp2依赖实现windows传输文件到linux

    前面提到过 xff0c java语言中可以通过scp客户端从windows向linux传输文件 xff0c 而nodejs中也有scp2这个依赖模块 xff0c 他可以实现从windows上传文件到linux 我们可以构建一个测试示例 xf
  • windows下安装Node版本管理器nvm

    笔者前面有介绍linuxmint下安装Node版本管理器nvm的文章 xff0c 这里介绍在Windows下的安装 xff0c 通过nvm的安装 xff0c 我们可以很方便的下载 安装 切换node版本 在windows上的安装与linux
  • Ubuntu22.04 安装Annaconda步骤、conda基础使用和pycharm使用anaconda

    概述 提示 xff1a 根据用户Ubuntu系统版本存在差异 xff0c 对比着阅读 官方软件下载仓库网站 xff1a https repo anaconda com archive 安装目录 概述前言一 下载Anaconda packag
  • nodejs遍历一个目录下所有的文件

    这个问题是我在实际中遇到的 xff0c 意思很明确 xff0c 一个目录下可能还嵌套子目录 xff0c 我需要遍历出该目录下所有的文件 xff0c 其实思路很简单 xff0c 就是利用递归的思路 xff0c 定义一个函数 xff0c 传入一