Node.js遍历文件夹的所有文件

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

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

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

const fs = require("fs");
const path = require('path');

//设置根目录
var root = './佐证材料';

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));

16495584-337d591a1538e243.png
演示目录.png

生成的data.txt文件
[{"name":"1.体制机制与规划","type":"dir"},{"name":"2.人才培养","type":"dir"},{"name":"3.教师队伍","type":"dir"},{"name":"4.校企合作与社会服务","type":"dir"},{"name":"5.综合管理绩效","type":"dir"},{"name":"6.亮点与特色","type":"dir"},{"name":"7.广东青年职业学院“创新强校工程”(2016-2020年)建设规划.pdf","type":"pdf"}]
接下来只要将data.txt的内容 代码格式化即可使用,代码格式化访问:
http://tool.oschina.net/codeformat/json

2.遍历所有目录(包括子目录)
  • 要遍历所有子目录就要用到递归调用,所以创建一个function专门处理这项业务
  • 使用同步读取,这样才能知道文件夹的遍历进度是否完成
  • 读取一个文件夹时,传递文件夹的路径和对应的数组给他
const fs = require("fs");
const path = require('path');

//设置根目录
var root = './H5代码';

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);
        }
    }
}

转载于:https://www.jianshu.com/p/a82bdf22beef

猜你喜欢

转载自blog.csdn.net/weixin_33909059/article/details/91189314