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 相关文章推荐
confirm的用法示例用于按钮操作时确定是否执行
Jun 19 Javascript
js数组如何添加json数据及js数组与json的区别
Oct 27 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 Javascript
微信小程序 SocketIO 实例讲解
Oct 13 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
Mar 03 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
详解Vue路由开启keep-alive时的注意点
Jun 20 Javascript
js实现鼠标跟随运动效果
Aug 02 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 Javascript
JavaScript Math对象和调试程序的方法分析
May 13 Javascript
解决layer弹出层中表单不起作用的问题
Sep 09 Javascript
vue+webpack 更换主题N种方案优劣分析
Oct 28 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
桌面中心(四)数据显示
2006/10/09 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
vue 虚拟DOM的原理
2020/10/03 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
Python 画出来六维图
2019/07/26 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
中学生期末评语
2014/02/03 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
创意婚礼策划方案
2014/05/18 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
测量员岗位职责
2015/02/14 职场文书
2015年项目经理工作总结
2015/04/30 职场文书