NodeJS 将文件夹按照存放路径变成一个对应的将文件夹按照存放路径变成一个对应的JSON的方法的方法
主要介绍了NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在编程之前,一定要有一个信条:代码是为了减少工作量而生的,重复枯燥的工作是不能容忍的。
需求需求
这是由上篇文章衍生出的需求,我已经将一个文件夹内所有的文件名转译为英文,但我在页面上还需要将这些图片引入加载。如果一个一个手写到程序里,未免有点劳心劳神。那么何不将这个文件夹按
照存放路径变成一个相应的JSON在前端请求并渲染呢?
说干就干。
文件夹的路径如下所示:
一级路径:test
二级路径:A,B,C...共十三个文件夹
三级路径:每个二级路径下有3-8个文件夹不等
四级路径:a.jpg,b.jpg,c.jpg等数量不等的图片文件
思路思路
1.一个全局变量:数组类型obj。
2.递归遍历目录,是文件夹的取出名字,建立一个对象,放入文件夹名name和一个空数组list,如
{
name:'fileName',
list:[]//用来存放下属路径
}
3.依次重复步骤2,直至寻找到路径下的文件,将文件名name和拼合好的路径src放入归属的list中,如下:
list:[
{
name:'fileName',
src:'filePath'
}
]
实践实践
语言
NodeJS
需求模块
fs/async。
代码 先上代码,逻辑解析在提示补上。
(function() {
Array.prototype.distinct = function() {
var arr = this,
result = [],
i,
j,
len = arr.length;
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (arr[i].name === arr[j].name) {
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
// 主业务代码
var fs = require("fs");
var async = require('async');
var obj = [];
var search = function(src) {
// 读取目录中的所有文件/目录
fs.readdir(src, function(err, paths) {
if (err) {
throw err;
}
paths.forEach(function(path) {
var _src = src + '/' + path;
fs.stat(_src, function(err, st) {
if (err) {
throw err;
}
// 判断是否为文件
if (st.isFile()) {
async.forEachLimit(obj, 1000, function(item, callback) {
if (src.match(new RegExp(item.name))) {
item.list.forEach(function(iv) {
if (src.match(new RegExp(iv.name))) {
iv.list.push({
name: path.split('.')[0],
src: _src
})
}
})
}
callback(null, item)
})
obj = obj.distinct();
fs.writeFile("main.json", JSON.stringify(obj), "utf-8", (error) => {
//监听错误,如正常输出,则打印null
if (error == null) {
obj = null;
}
});
}
// 如果是目录则递归调用自身
else if (st.isDirectory()) {
if (obj.length <= 0) {
obj.push({
name: path,
list: []
})
} else {
var value = paths;
async.forEachLimit(obj, 1000, function(item, callback) {
//如果数组里已有
if (src.match(new RegExp(item.name))) {
评论0
最新资源