背景:
公司需要重构java后端项目,需要统计所有功能的action的id,类似下面这种
这只是一个最小的xml中的内容,全部加起来大概有几千+
想法:
刚开始想着用python来写,后来想起来自己是前端工程师为什么不用js来实现呢,说干就干.
大致流程:
- 将目录下的xml文件拷贝出来,用小工具将文件名修改成txt,方便读取
2. 开始书写js代码 获取文件下的所有文件路径
/**
* 递归遍历,获取指定文件夹下面的所有文件路径
*/
function getAllFiles(filePath) {
let allFilePaths = [];
if (fs.existsSync(filePath)) {
const files = fs.readdirSync(filePath);
for (let i = 0; i < files.length; i++) {
let file = files[i]; // 文件名称(不包含文件路径)
let currentFilePath = filePath + "/" + file;
let stats = fs.lstatSync(currentFilePath);
if (stats.isDirectory()) {
allFilePaths = allFilePaths.concat(getAllFiles(currentFilePath));
} else {
allFilePaths.push(currentFilePath);
}
}
} else {
console.warn(`指定的目录${filePath}不存在!`);
}
return allFilePaths;
}
3.读取每个文件的内容通过正则进行匹配
function main(srcDir,outFileName) {
let allFiles = getAllFiles(srcDir);
let reg = /<Action id=(.*?)>/g;
let out = "";
console.log(`文件数量:${allFiles.length}`);
for (let i = 0; i < allFiles.length; i++) {
// 同步读取文件内容
let content = fs.readFileSync(allFiles[i], "utf-8").toString();
let result = "";
while ((result = reg.exec(content))) {
out += "\r\n" + result[1];
}
}
//写出到文件夹
fs.writeFileSync(outFileName, out);
}
- 大功告成
总结
虽然并没有什么技术含量.前端新人第一次通过所学知识完成任务,还是有一定成就感.大佬嘴下留情!!