这两天遇到一个项目,要将一个文件夹下面的所有的文件分别做成一个a链接,因为文件太多,一个一个的手写非常麻烦耗时,打算将这些文件名生成一个数组来遍历,而这个数组手动添加数据也是费时费力,于是想到node里面的fs模块来自动创建这个数组
下面的代码只能遍历当前的路径,要遍历所有的子路径请看后面的章节
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
要遍历所有子目录就要用到递归调用,所以创建一个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);
}
}
}
一般情况下便利更多不确定的子级规律就会用到递归,通过接口返回下图
本文地址:https://www.zhuimengzhu.com/details/145.html
转载地址:暂无
转载说明:转载时请在文首注明来源zhuimengzhu.com 及教程作者,并附本文链接。谢谢各位编辑同仁配合。zhuimengzhu 保留追究相应责任的权利。