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常考语句107条收集
Mar 09 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
Mar 27 Javascript
JS使用getComputedStyle()方法获取CSS属性值
Apr 23 Javascript
JavaScript数组去重的两种方法推荐
Apr 05 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
原生JS实现N级菜单的代码
May 21 Javascript
浅谈ElementUI中switch回调函数change的参数问题
Aug 24 Javascript
javascript数组去重方法总结(推荐)
Mar 20 Javascript
vue 中 命名视图的用法实例详解
Aug 14 Javascript
JS实现省市县三级下拉联动
Apr 10 Javascript
如何用threejs实现实时多边形折射
May 07 Javascript
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
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 Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
laravel5.6实现数值转换
2019/10/23 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
python ubplot使用方法解析
2020/01/10 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
业务员岗位职责
2013/11/16 职场文书
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
2014年教学工作总结
2014/11/13 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
工作后的感想
2015/08/07 职场文书