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 函数中的参数使用分析
Mar 27 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
Dec 19 Javascript
Javascript中this的用法详解
Sep 22 Javascript
js propertychange和oninput事件
Sep 28 Javascript
Jquery网页内滑动缓冲导航的实现代码
Apr 05 Javascript
js限制input标签中只能输入中文
Jun 26 Javascript
简易的JS计算器实现代码
Oct 18 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
vue 纯js监听滚动条到底部的实例讲解
Sep 03 Javascript
详解Vue-axios 设置请求头问题
Dec 06 Javascript
详解微信小程序支付流程与梳理
Jul 16 Javascript
React Native登录之指纹登录篇的示例代码
Nov 03 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原创论坛
2006/10/09 PHP
PHP中对数据库操作的封装
2006/10/09 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
Python正则表达式完全指南
2017/05/25 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
python的依赖管理的实现
2019/05/14 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
Ruby如何定义一个类
2012/10/08 面试题
环境工程毕业生自荐信
2013/11/17 职场文书
职工运动会邀请函
2014/01/19 职场文书
好家长事迹材料
2014/01/23 职场文书
2016年感恩节寄语
2015/12/07 职场文书
Python Socket编程详解
2021/04/25 Python
用python修改excel表某一列内容的操作方法
2021/06/11 Python