1

  1. var fs = require("fs"),
  2. path = require("path");
  3.  
  4. function walk(dir, callback) {
  5. fs.readdir(dir, function(err, files) {
  6. if (err) throw err;
  7. files.forEach(function(file) {
  8. var filepath = path.join(dir, file);
  9. fs.stat(filepath, function(err,stats) {
  10. if (stats.isDirectory()) {
  11. walk(filepath, callback);
  12. } else if (stats.isFile()) {
  13. callback(filepath, stats);
  14. }
  15. });
  16. });
  17. });
  18. }

2

  1. import fs from 'fs';
  2. import path from 'path';
  3.  
  4. function walk(dir) {
  5. return new Promise((resolve, reject) => {
  6. fs.readdir(dir, (error, files) => {
  7. if (error) {
  8. return reject(error);
  9. }
  10. Promise.all(files.map((file) => {
  11. return new Promise((resolve, reject) => {
  12. const filepath = path.join(dir, file);
  13. fs.stat(filepath, (error, stats) => {
  14. if (error) {
  15. return reject(error);
  16. }
  17. if (stats.isDirectory()) {
  18. walk(filepath).then(resolve);
  19. } else if (stats.isFile()) {
  20. resolve(filepath);
  21. }
  22. });
  23. });
  24. }))
  25. .then((foldersContents) => {
  26. resolve(foldersContents.reduce((all, folderContents) => all.concat(folderContents), []));
  27. });
  28. });
  29. });
  30. }
  31.  
  32. es6版本
  1. const fs = require('fs').promises;
  2. const path = require('path');
  3.  
  4. async function walk(dir) {
  5. let files = await fs.readdir(dir);
  6. files = await Promise.all(files.map(async file => {
  7. const filePath = path.join(dir, file);
  8. const stats = await fs.stat(filePath);
  9. if (stats.isDirectory()) return walk(filePath);
  10. else if(stats.isFile()) return filePath;
  11. }));
  12.  
  13. return files.reduce((all, folderContents) => all.concat(folderContents), []);
  14. }
  1.  
  1.  

3 批量处理文件

  1. const fs = require('fs').promises;
  2. const path = require('path');
  3. const EventEmitter = require('events');
  4.  
  5. let emitter = new EventEmitter();
  6.  
  7. async function walk(dir) {
  8. let files = await fs.readdir(dir);
  9. files = await Promise.all(files.map(async file => {
  10. const filePath = path.join(dir, file);
  11. const stats = await fs.stat(filePath);
  12. if (stats.isDirectory()) return walk(filePath);
  13. else if(stats.isFile()) return filePath;
  14. }));
  15.  
  16. return files.reduce((all, folderContents) => all.concat(folderContents), []);
  17. }
  18. var walker=walk('.');
  19.  
  20. walker.then(function(files){
  21. files.map(function(file){
  22. if(file.indexOf('.vmCmp')<0){
  23. return;
  24. }
  25. let content = fs.readFile(path.join('.',file),'UTF-8');
  26. content.then(function(data){
  27. console.log(file)
  28. //console.log(data);
  29. })
  30. });
  31. })
  32. //阻塞进程 放置退出
  33. process.stdin.resume();

const fs = require('fs').promises;const path = require('path');const EventEmitter = require('events');
let emitter = new EventEmitter();
async function walk(dir) {    let files = await fs.readdir(dir);    files = await Promise.all(files.map(async file => {        const filePath = path.join(dir, file);        const stats = await fs.stat(filePath);        if (stats.isDirectory()) return walk(filePath);        else if(stats.isFile()) return filePath;    }));
    return files.reduce((all, folderContents) => all.concat(folderContents), []);}var walker=walk('.');
walker.then(function(files){files.map(function(file){if(file.indexOf('.vmCmp')<0){return;}let content = fs.readFile(path.join('.',file),'UTF-8');content.then(function(data){console.log(file)//console.log(data);})});})
process.stdin.resume();

nodejs 遍历目录的更多相关文章

  1. node.js整理 03文件操作-遍历目录和文本编码

    遍历目录 递归算法 遍历目录时一般使用递归算法,否则就难以编写出简洁的代码. 递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题 function factorial(n) { if (n = ...

  2. linux下遍历目录

    遍历目录的主要思想 由于目录就是一颗树,所以遍历目录就转换为遍历一棵树.谈到树的遍历就再熟悉不过了,有树的前序.层次和后序遍历,我使用的是前序遍历,后序遍历和前序遍历本质上一样,而层次遍历要比前两个麻 ...

  3. php源码之遍历目录下的所有的文件

    <?php //遍历目录下的所有的文件 -- 递归调用 // http://www.manongjc.com/article/1495.html function get_all_file1($ ...

  4. Python遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例

    遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例: #-*- encoding: utf-8 -*- __author__ = 'liudong' import linecache,sys ...

  5. 在Linux下和Windows下遍历目录的方法及如何达成一致性操作

    最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件 ...

  6. NSFileManager 遍历目录

    NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *documentPath = [NSHomeDirecto ...

  7. php无限遍历目录-修正版

    最近在能php目录操作,搞了一个目录无限遍历: 使用的函数有: isset()判断某个变量是否定义 chdir() 将当前目录改变为指定的目录. opendir() 打开目录. readdir()读取 ...

  8. NodeJS系列~目录

    回到占占推荐博客索引 Node.js官网对它的阐述 Node.js is a platform built on Chrome's JavaScript runtime for easily buil ...

  9. 可编译为 UNICODE 和 ANSI 版本的遍历目录树程序_0.1

    路径暂时是写死的 编译两个版本的程序: g++  treeT.cpp -municode -D_UNICODE -o treeT_UNIg++  treeT.cpp -o treeT_ASC 为了观察 ...

随机推荐

  1. 百度编辑器ueditor上传图片失败,显示上传错误,实际上图片已经传到服务器或者本地

    报错,上传失败,图片没有显示,且调试response没有信息,但是图片已经上传到了本地 这个问题是因为ueditor里面的Upload.class.php里面__construct()方法里面的ico ...

  2. java网络通信:netty

    Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保 ...

  3. 【工具安装】kali linux 安装教程

    日期:2019-07-14 16:36:21 介绍:使用最新版的 VMware 来安装 kali linux 0x01.下载镜像 首先需要安装 VMware,安装步骤点这里. VMware 安装教程 ...

  4. TCP 首部格式

    <图解TCP/IP> 6.7  TCP的首部格式 TCP中没有表示包长度和数据长度的字段.可由IP层获知TCP的包长由TCP的包长可知数据的长度. 源端口号:表示发送端端口号,字段长16位 ...

  5. centos7:Kafka集群安装

    解压文件到安装目录 tar -zxvf kafka_2.10-0.10.2.1.tgz 1.进入目录 cd kafka_2.10-0.10.2.1 mkdir logs cd config cp se ...

  6. python3 基本数据类型_1

    不得已,要学习python3了,之前了解到py2与py3有很大不同,不过学起来才能感觉到,比如print. 不过,同样的代码,可以使用py3,py2执行,结果也相似,大家可以看看. 大概因为初学,还未 ...

  7. CSU1081有向图BFS

    集训队分组 Description中南大学ACM的暑期集训马上就要开始了,这次集训会将全体N名集训队员(编号分别为1, 2, …, N)按集训选拔赛的排名分成两组,前K名队员分入A组,其余队员分入B组 ...

  8. [转帖]解决K8S 安装只有 一直提示:kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1 的方法

    Centos7 终端报Message from syslogd :kernel:unregister_netdevice https://www.jianshu.com/p/96d7e2cd9e99 ...

  9. Windows系统里Oracle 11g R2 Client(64bit)的下载与安装

    环境: windows10系统(64位) 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系:可以安装plsql,或者直接用命令行操作) Oracle 11g 是仅 ...

  10. MySQL-快速入门(6)连接查询、子查询、正则表达式查询、数据的插入删除更新

    1.内连接查询:inner join ... on 只有满足条件的记录才能够出现在结果关系中,即完全相等.自连接查询是一种特殊的内连接查询. 2.外连接查询: 1>左外连接 / 左连接:返回包括 ...