在程序开发过程中,有时候需要对一个目录下的文件进行批量操作。如果我们手动去一个个查找、处理,那么效率极低,还容易出错。因此,我们可以使用node.js,来实现一个遍历指定目录下所有文件并生成json的脚本。
什么是node.js
node.js是一种流行的后端JavaScript运行时环境,基于Chrome V8引擎构建。它使得JavaScript代码能够在服务器上被执行,同时还支持网络编程协议,并提供了丰富的库和工具链,方便开发人员快速构建高性能、可扩展的应用程序。
遍历指定目录下所有文件
我们将使用node.js,实现一个递归遍历指定目录下所有文件的方法。假设我们要遍历的目录名为dir,那么我们可以采用以下步骤:
1、使用fs.readdirSync(dir)方法读取目录中的所有文件和子目录;
2、对每个文件和子目录进行判断:
* 如果是目录,则递归调用本方法;
* 如果是文件,则记录其路径并添加到一个数组中。
示例代码:
const fs = require('fs');
const path = require('path');
function traverseDir(dir) {
const result = [];
const files = fs.readdirSync(dir);
for (const file of files) {
const filePath = path.join(dir, file);
if (fs.statSync(filePath).isDirectory()) {
// 如果是目录,则递归调用本方法
result.push(...traverseDir(filePath));
} else {
// 如果是文件,则记录其路径
result.push(filePath);
}
}
return result;
}
const files = traverseDir('./dir');
console.log(files);
生成JSON
有了遍历指定目录下所有文件的方法,我们接下来,可以将这些文件名组成的数组,转化为一个JSON对象。假设我们要生成的json文件名为 result.json ,那么我们可以按照以下步骤进行操作:
1、初始化一个空数组;
2、遍历处理得到的所有文件名,并使用path.parse()方法获取每个文件的基本信息;
3、将每个文件的基本信息包装成一个对象并添加到数组中;
4、将这个数组写入到result.json文件中。
示例代码:
const fs = require('fs');
const path = require('path');
function traverseDir(dir) {
const result = [];
const files = fs.readdirSync(dir);
for (const file of files) {
const filePath = path.join(dir, file);
if (fs.statSync(filePath).isDirectory()) {
result.push(...traverseDir(filePath));
} else {
result.push({
filename: path.basename(filePath),
extname: path.extname(filePath),
path: filePath,
});
}
}
return result;
}
const files = traverseDir('./dir');
fs.writeFileSync('result.json', JSON.stringify(files, null, 2));
生成树形结构JSON
如果您需要一个树形结构的数据格式,我们稍加改动上面的示例代码即可。
示例代码:
const fs = require("fs");
const path = require("path");
// 遍历指定目录下的所有文件,并将信息保存到JSON对象中
function traverseDirToTree(dir) {
const result = [];
const files = fs.readdirSync(dir);
for (const file of files) {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);
// 如果是文件夹,递归遍历
if (stat.isDirectory()) {
result.push({
name: file,
type: "directory",
children: traverseDirToTree(filePath),
});
} else {
result.push({
name: file,
type: "file",
size: stat.size,
modified: stat.mtime,
});
}
}
return result;
}
const files = traverseDirToTree("./dir");
fs.writeFileSync("result.json", JSON.stringify(files, null, 2));
希望本文能够对您有所帮助,感谢您的阅读!
人人为我,我为人人,谢谢您的浏览,我们一起加油吧。