node.js 遍历所有文件

node.js 遍历所有文件

如标题所示,遍历文件夹下的所有文件,主要功能如下:
  • 传入一个路径,读取路径里面所有的文件

  • 遍历读取的文件,判断当前文件是文件还是文件夹

  • 当前目录为文件,打印出当前文件绝对路径

  • 当前目录为文件夹,获取文件夹路径,继续读取路径下文件

  • 遍历完目录中的所有文件为止

代码中用到的几个方法
  • 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);//递归,如果是文件夹,就继续遍历该文件夹下面的文件
                        }
                    }
                })
            });
        }
    });
}

实例1:

给定一个路径,递归遍历出路径下的所有文件并且做成对象的格式返回。

function get_file(position, key) {
    let index = 0
    let dirs = fs.readdirSync(position)
    let res = []
    for (let i in dirs) {
        let p = path.join(position, dirs[i])
        let status = fs.statSync(p)
        if (status.isDirectory()) {
            let m = new Map()
            m.set("path", p)
            m.set("title", dirs[i])
            m.set("key", key + `-${i}`)
            m.set("children", get_file(p, key + `-${i}`))
            // console.log(m)
            res.push(_strMapToObj(m))
        }
        if (status.isFile()) {
            let m = new Map()
            m.set("path", position)
            m.set("title", dirs[i])
            m.set("key", key + `-${i}`)
            res.push(_strMapToObj(m))
            // console.log(p)
        }
    }
    return res
}

export function get_all_directry(p, key) {
    const m = new Map();
    // m.set("path", p)
    m.set("title", "File")
    m.set("path", p)
    m.set("key", key)
    m.set("children", get_file(p, key))
    return [_strMapToObj(m)]
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值