Node.js 使用递归实现遍历文件夹中所有文件


Posted in Javascript onSeptember 18, 2017

如标题所示,遍历文件夹下的所有文件,主要功能如下:

传入一个路径,读取路径里面所有的文件
遍历读取的文件,判断当前文件是文件还是文件夹
当前目录为文件,打印出当前文件绝对路径
当前目录为文件夹,获取文件夹路径,继续读取路径下文件
遍历完目录中的所有文件为止
代码中用到的几个方法

path.resolve(path)

一个路径或路径片段解析成一个绝对路径,返回解析后的路径字符串
fs.readdir(path[,option],callback)

读取目录下面的文件,返回目录下的文件列表对象,如果传入的是个文件,返回这个文件

fs.stat(path,callback)

获取文件信息对象Stats,包括文件大小,gid等信息

stats.isFile()

文件信息对象Stats的一个方法,判断当前文件是不是一个文件

stats.isDirectory()

文件信息对象Stats的一个方法,判断当前文件是不是一个文件夹

代码和注释如下:

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

//解析需要遍历的文件夹,我这以E盘根目录为例
var filePath = path.resolve('E:');

//调用文件遍历方法
fileDisplay(filePath);

/**
 * 文件遍历方法
 * @param filePath 需要遍历的文件路径
 */
function fileDisplay(filePath){
  //根据文件路径读取文件,返回文件列表
  fs.readdir(filePath,function(err,files){
    if(err){
      console.warn(err)
    }else{
      //遍历读取到的文件列表
      files.forEach(function(filename){
        //获取当前文件的绝对路径
        var filedir = path.join(filePath,filename);
        //根据文件路径获取文件信息,返回一个fs.Stats对象
        fs.stat(filedir,function(eror,stats){
          if(eror){
            console.warn('获取文件stats失败');
          }else{
            var isFile = stats.isFile();//是文件
            var isDir = stats.isDirectory();//是文件夹
            if(isFile){
              console.log(filedir);
            }
            if(isDir){
              fileDisplay(filedir);//递归,如果是文件夹,就继续遍历该文件夹下面的文件
            }
          }
        })
      });
    }
  });
}

运行结果为:

E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\AbstractCacheInvoker.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\AbstractCacheResolver.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\BasicOperation.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheableOperation.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\BeanFactoryCacheOperationSourceAdvisor.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\AbstractFallbackCacheOperationSource.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheAspectSupport.CacheOperationContext.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheAspectSupport.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheAspectSupport.CacheOperationMetadata.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheErrorHandler.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheEvictOperation.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheInterceptor.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheOperation.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheOperationInvocationContext.html
E:\jars\spring-framework-4.2.9.RELEASE\docs\javadoc-api\org\springframework\cache\interceptor\CacheOperationInvoker.html
············

到这Node.js 遍历文件夹的实现方法就结束了,希望大家以后多多支持三水点靠木。

Javascript 相关文章推荐
Prototype使用指南之range.js
Jan 10 Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 Javascript
另一个javascript小测验(代码集合)
Jul 27 Javascript
javascript使用prototype完成单继承
Dec 24 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
Mar 31 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
angular双向绑定模拟探索
Dec 26 Javascript
JavaScript 保护变量不被随意修改的实现代码
Sep 27 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
详解JavaScript中的函数、对象
Apr 01 Javascript
Vue 实现html中根据类型显示内容
Oct 28 Javascript
微信小程序实现日历小功能
Nov 18 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
Sep 18 #Javascript
为什么我们要做三份 Webpack 配置文件
Sep 18 #Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 #Javascript
十个免费的web前端开发工具详细整理
Sep 18 #Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
Sep 18 #Javascript
HTML5开发Kinect体感游戏的实例应用
Sep 18 #Javascript
聊聊那些使用前端Javascript实现的机器学习类库
Sep 18 #Javascript
You might like
php 引用(&)详解
2009/11/20 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
使用php清除bom示例
2014/03/03 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
利用JS制作万年历的方法
2017/08/16 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
浅谈Python中的bs4基础
2018/10/21 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
如何查找网页漏洞
2016/06/22 面试题
大专生自荐信
2013/10/04 职场文书
高校教师思想汇报
2014/01/11 职场文书
销售员岗位职责
2015/02/10 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python