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 相关文章推荐
JavaScript开发规范要求(规范化代码)
Aug 16 Javascript
jQuery写fadeTo示例代码
Feb 21 Javascript
手写简单的jQuery雪花飘落效果实例
Apr 22 jQuery
深入理解react-router 路由的实现原理
Sep 26 Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 Javascript
Next.js实现react服务器端渲染的方法示例
Jan 06 Javascript
微信小程序如何获取群聊的openGid以及名称详解
Jul 17 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
layer 关闭指定弹出层的例子
Sep 25 Javascript
Node使用Selenium进行前端自动化操作的代码实现
Oct 10 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
Jul 22 Javascript
js重写alert事件(避免alert弹框标题出现网址)
Dec 04 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中eval函数的危害与正确禁用方法
2014/06/30 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
python matplotlib画图实例代码分享
2017/12/27 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
django页面跳转问题及注意事项
2019/07/18 Python
pandas的排序和排名的具体使用
2019/07/31 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
python空元组在all中返回结果详解
2020/12/15 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
50道外企软件测试面试题
2014/08/18 面试题
会计系个人求职信范文分享
2013/12/20 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python