nodejs文件系统案例
/**
* 2020-7-6
* 冷雨看前端
* 实现需求:检查更新需要导出的配置表,如果当前的导出配置的表在对应的目录不存在,
* 则剔除这项配置(针对在当前配置基础上进行检查,也可根据需求做调整)
*/
const fs = require("fs");
const path = require('path');
const url = require('url');
const exportFilleName = 'export.php';
const files = fs.readdirSync('../');//读取上一级目录的所有文件内容
const startFlagStr = 'startFlag';//读取文件里面开始位置的标识,看文件里面有啥特殊开始标识
const endFlagStr = 'endFlag';
var data = fs.readFileSync(exportFilleName);
var exportFileStr = data.toString();
var pathFilesArr = getPathTemplateArr(files);//上级路径下的所有配置文件
var exportTemplateaArr = getExportTemplateaArr(exportFileStr);//需要导出文件信息的所有配置信息
var filesArr = getExportArr(exportTemplateaArr,pathFilesArr);//检查对比需要导出的最新配置信息
var newExportData = getExportTemplateData(exportFileStr,filesArr);//更新下原来导出文件,得到最新的导出文件数据流
fs.writeFileSync(exportFilleName,newExportData);//把数据写入到原有文件中
console.log('提示下检查更新完成');
/**
*
* @param {*获取读取文件中所有的配置信息,返回列表信息} fileStr
*/
function getExportTemplateaArr(fileStr) {
var tabNameArr = [];
var fielStrArr = fileStr.split('\r\n');
var canPush = false;
for (let index = 0; index < fielStrArr.length; index++) {
let element = fielStrArr[index] + '';
element = element.replace(/(\s+)|("+)/g,'');//替换一些空格,双引号符号,读者可以根据自己需求更改
if(element === endFlagStr){//结束位置
canPush = false;
break;
}
if(canPush){
let subStrArr = element.split(',');
subStrArr.forEach(item => {
item = item.replace(/[^a-zA-Z_]/g,'');//把一些非英文字母替换问空,正常配置信息都不会填写这些符号
if(item){
tabNameArr.push(item);
}
});
}
if(element === startFlagStr){//开始位置
canPush = true;
}
}
return tabNameArr;
}
/**
* 这里我读取是tpl开头或者的xml配置文件
* @param {*路径下的所有配置文件名} files
*/
function getPathTemplateArr(files) {
var filesArr = [];
files.forEach((file, index)=> {
let stat = fs.lstatSync("../" + file);
if (stat.isFile()) {
if(path.extname(file) == '.xml'){
if(file.substring(0,4) === 'tpl_'){
filesArr.push(path.parse(file).name.substring(4));
}else{
filesArr.push(path.parse(file).name);
}
}
}
});
return filesArr;
}
/**
*
* @param {*export原有的导出模板表列表} exportTemplateArr
* @param {*路径下拥有的所有模板表列表} pathTemplateArr
*/
function getExportArr(exportTemplateArr,pathTemplateArr) {
var templateArr = [];
for (const iterator of exportTemplateArr) {
var index = pathTemplateArr.indexOf(iterator);
if( index != -1){
templateArr.push(iterator);
}
}
return templateArr;
}
/**
*
* @param {*原数据} fileStr
* @param {*导出列表需要更改的列表} templateArr
*/
function getExportTemplateData(fileStr,templateArr) {
var newExportFileStr = '';
var tabNameArr = [];
var fielStrArr = fileStr.split('\r\n');
var inRewritePos = false;
var hasWrite = false;
for (let index = 0; index < fielStrArr.length; index++) {
let element = fielStrArr[index] + '';
element = element.replace(/(\s+)|("+)/g,'');//把制表符换行符等替换为空
if(element === endFlagStr){//结束位置
inRewritePos = false;
}
if(!inRewritePos){
if(index < (fielStrArr.length - 1)){
newExportFileStr += fielStrArr[index] +'\r\n';
}else{
newExportFileStr += fielStrArr[index];
}
}else{
if(!hasWrite){
hasWrite = true;
for (let j = 0; j < templateArr.length; j++) {
let template = templateArr[j];
if(j < templateArr.length - 1){
newExportFileStr +='\t' + '"' + template + '",' + '\r\n';
}else{
newExportFileStr +='\t' + '"' + template + '"' + '\r\n';
}
}
newExportFileStr +='\t'+ ');' + '\r\n' + '\r\n';
}
}
if(element === startFlagStr){//开始位置
inRewritePos = true;
}
}
return newExportFileStr;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交