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类定义例子
Sep 12 Javascript
javascript调试之DOM断点调试法使用技巧分享
Apr 15 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
Apr 21 Javascript
AngularJS 避繁就简的路由
Jul 01 Javascript
AngularJS 模块化详解及实例代码
Sep 14 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
详解前后端分离之VueJS前端
May 24 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
Sep 28 Javascript
bootstrap table实现合并单元格效果
Dec 24 Javascript
vue-cli3 DllPlugin 提取公用库的方法
Apr 24 Javascript
小程序实现日历左右滑动效果
Oct 21 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
May 23 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实现的生成静态HTML速度快类库
2007/03/31 PHP
坏狼的PHP学习教程之第2天
2008/06/15 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
删除节点的jquery代码
2014/01/13 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
Python中Yield的基本用法
2020/10/18 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
司机辞职报告范文
2014/01/20 职场文书
搞笑创意广告语
2014/03/17 职场文书
企业形象策划方案
2014/05/29 职场文书
代理人委托书
2014/08/01 职场文书
三峡大坝导游词
2015/01/31 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL