nodejs 实现过滤文件中的中文,写入并保存

创建过滤文件,如文件名:test.js:

let fs = require("fs");
let path = require("path"); 
let readline = require("readline");

let programName = "programFile"; //改成自己项目文件夹名称
let filePath = path.resolve(`${programName}`);//注意文件目录
let reg = /[\u4e00-\u9fa5]/g; //中文正则

//根据文件类型,判断文件是否需要检测(过滤掉图片等文件类型)
function fileTypeNeedCheck(string) {
    switch (string) {
        case ".json":
        // case ".md":
        case ".wxml": //小程序
        case ".wxss": //小程序
        case ".qml": //小程序
        case ".qss": //小程序
        case ".css": //小程序/h5
        case ".js": //小程序/h5
        case ".m": //ios
        // case ".h": //ios
        case ".vue": //vue
        case ".jsp": //jsp
            return true;
        default:
            return false;
    }
}

//node_modules等文件夹不过滤
function folderNeedCheck(string){
    switch(true){
       case string.includes("node_modules"): //忽略node包
       case string.includes(".eslintrc.js"): //忽略eslint
        case string.includes("Pods"):    //忽略ios第三方库
           return false;
        default:
            return true;
    }
}

//按行read
function readFileToArr(fReadName, callback) {
    var fRead = fs.createReadStream(fReadName);
    var objReadline = readline.createInterface({
        input: fRead,
    });
    var arr = new Array();
    objReadline.on("line", function (line) {
        if (line.match(reg)) {
            arr.push(line.match(reg));
        }
    });
    objReadline.on("close", function () {
        callback(arr);
    });
}

//文件遍历方法
function fileDisplay(filePath) {
    //根据文件路径读取文件,返回文件列表
    fs.readdir(filePath, function (err, files) {
        if (err) {
            // console.warn(err)
        } else {
            //遍历读取到的文件列表
            files.forEach(function (filename) {
                //获取当前文件的绝对路径
                var filedir = path.join(filePath, filename);
                //根据文件路径获取文件信息,返回一个fs.Stats对象
                fs.stat(filedir, function (error, stats) {
                    if (error) {
                        // console.warn('获取文件stats失败');
                    } else {
                        var isFile = stats.isFile(); //是文件
                        var isDir = stats.isDirectory(); //是文件夹
                        if (isFile) {
                            // console.log(filedir);
                            let fileExtension = filedir.substring(filedir.lastIndexOf("."));
                            if (fileTypeNeedCheck(fileExtension) && folderNeedCheck(filedir)) {
                                readFileToArr(filedir, function (data) {
                                    data.forEach((item, index) => {                                       
                                        let txt = `${filename}-${index}` + item.join("") + '\n';
                                        //写入文件并保存txt(如无则创建)
                                        fs.appendFileSync(`${programName}.txt`,txt,(err)=>{
                                            console.log(txt,'err',err)
                                        });
                                    });
                                });
                            }
                        }
                        if (isDir) {
                            fileDisplay(filedir); //递归,如果是文件夹,就继续遍历该文件夹下面的文件
                        }
                    }
                });
            });
        }
    });
}

//调用文件遍历方法
fileDisplay(filePath);
node test.js

打开终端,运行上述nodejs文件,可生成过滤后文稿txt.

你可能感兴趣的:(javascript,javascript,node)