这两天遇到一个项目,要将一个文件夹下面的所有的文件分别做成一个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));
生成的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