Node.js 遍历文件夹的所有文件做一个文件管理器
文章 1775 0 0 0
发布时间:2019年12月06日

概述

这两天遇到一个项目,要将一个文件夹下面的所有的文件分别做成一个a链接,因为文件太多,一个一个的手写非常麻烦耗时,打算将这些文件名生成一个数组来遍历,而这个数组手动添加数据也是费时费力,于是想到node里面的fs模块来自动创建这个数组

1.遍历当前目录下的所有文件,并为其创建描述对象

下面的代码只能遍历当前的路径,要遍历所有的子路径请看后面的章节

const fs = require("fs");
const path = require('path');
//设置根目录
var root = './public';
var arr = [];
//获取此文件夹下所有的文件(数组)
var files = fs.readdirSync(root);
//遍历这些文件或者文件夹
for(var i=0;i<files.length;i++){
    //为文件创建一个描述对象
    var filePath = {};
    //添加name属性
    filePath.name = files[i];
    var fileStat = fs.statSync(path.join(root,files[i]));
    //判断是否是文件夹
    if(fileStat.isDirectory()){
        //文件夹类型则添加type属性为dir
        filePath.type = 'dir';
    }else{
        //文件类型则添加type属性为文件后缀名
        filePath.type = path.extname(files[i]).substring(1);
    }
    //将对象添加到数组中
    arr.push(filePath);
}//将数组转换成字符串后写入data.txt文件中保存
fs.writeFileSync('./data.txt', JSON.stringify(arr));

演示目录.png

Node.js 遍历文件夹的所有文件做一个文件管理器

2.遍历所有目录(包括子目录)

要遍历所有子目录就要用到递归调用,所以创建一个function专门处理这项业务

使用同步读取,这样才能知道文件夹的遍历进度是否完成

读取一个文件夹时,传递文件夹的路径和对应的数组给他

const fs = require("fs");
const path = require('path');
//设置根目录
var root = './public';
var arr = [];
//调用函数遍历根目录,同时传递 文件夹路径和对应的数组
//请使用同步读取fileDisplay(root,arr);
//读取完毕则写入到txt文件中
fs.writeFileSync('./data.txt', JSON.stringify(arr));
function fileDisplay(dirPath,arr){
    var filesList = fs.readdirSync(dirPath);
    for(var i=0;i<filesList.length;i++){
        //描述此文件/文件夹的对象
        var fileObj = {};
        fileObj.name = filesList[i];
        //拼接当前文件的路径(上一层路径+当前file的名字)
        var filePath = path.join(dirPath,filesList[i]);
        //根据文件路径获取文件信息,返回一个fs.Stats对象
        var stats = fs.statSync(filePath);
        if(stats.isDirectory()){
            //如果是文件夹
            fileObj.type = 'dir';
            fileObj.child = [];
            arr.push(fileObj);
            //递归调用
            fileDisplay(filePath,arr[i].child);
        }else{
            //不是文件夹,则添加type属性为文件后缀名
            fileObj.type = path.extname(filesList[i]).substring(1);
            arr.push(fileObj);
        }
    }
}

一般情况下便利更多不确定的子级规律就会用到递归,通过接口返回下图
Node.js 遍历文件夹的所有文件做一个文件管理器

评论专区