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 相关文章推荐
Jquery Uploadify多文件上传带进度条且传递自己的参数
Aug 28 Javascript
javascript实现类似java中getClass()得到对象类名的方法
Jul 27 Javascript
基于javascript实现listbox左右移动
Jan 29 Javascript
JS之获取样式的简单实现方法(推荐)
Sep 13 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
Oct 26 Javascript
JS正则替换掉小括号及内容的方法
Nov 29 Javascript
JavaScript数据结构之数组的表示方法示例
Apr 12 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 jQuery
JS实现对json对象排序并删除id相同项功能示例
Apr 18 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
vue实现节点增删改功能
Sep 26 Javascript
vue-cli —— 如何局部修改Element样式
Oct 22 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扩展编写点滴 技巧收集
2010/03/09 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
python求绝对值的三种方法小结
2019/12/04 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
关于VPN
2012/06/10 面试题
法院信息化建设方案
2014/05/21 职场文书
十七岁的单车观后感
2015/06/12 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript