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 相关文章推荐
js 操作符实例代码
Oct 24 Javascript
Jquery动态添加及删除页面节点元素示例代码
Jun 16 Javascript
JavaScript实现按Ctrl键打开新页面
Sep 04 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
JS实现的网页背景闪电闪烁效果代码
Oct 17 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
从零开始做一个pagination分页组件
Mar 15 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
Sep 19 jQuery
Vue实现购物车场景下的应用
Nov 27 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
Vue常用指令详解分析
Aug 19 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调用自己java程序的方法详解
2016/05/13 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
前端路由&webpack基础配置详解
2019/06/10 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
Python3.2中的字符串函数学习总结
2015/04/23 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
python 绘制场景热力图的示例
2020/09/23 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
中国跨境电商:Tomtop
2017/03/16 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
应聘教师自荐信
2013/10/12 职场文书
有关打架的检讨书
2014/01/25 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
高中学校对照检查材料
2014/08/31 职场文书
盲山观后感
2015/06/11 职场文书
安全生产隐患排查制度
2015/08/05 职场文书