nodejs文件系统案例

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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值