node 讀取多個文件、合並多個文件、讀寫多個文件


一、讀取文件

1、找去匹配的內容


let fs = require('fs')
let content = fs.readFileSync('/Users/**/desktop/Test.txt', 'utf-8')
console.log(content.match(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g))


2、讀取文件

var fs = require('fs');
let content = fs.readFileSync('/Users/**/desktop/mark.log', 'utf-8')
fs.appendFile('/Users/caofan/desktop/Test.txt', content, function (err) {
    if (err) throw err;
    console.log('The "data to append" was appended to file!');
});


3、按行讀取單個文件

var readline = require('readline');
var fs = require('fs');
var os = require('os');

var fReadName = '/Users/**/desktop/title/title_20171101.log';
var fWriteName = './emoji1.csv';
var fRead = fs.createReadStream(fReadName);
var fWrite = fs.createWriteStream(fWriteName);
var enableWriteIndex = true;

var objReadline = readline.createInterface({
    input: fRead
});

var index = 1;
var matchArr = [];

objReadline.on('line', (line)=>{
    if (enableWriteIndex) {
        if(line.match(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g)){
            matchArr.push(index)
            var tmp = line;
            fWrite.write(tmp + os.EOL);
            // if (matchArr.length <= 10) {      //輸出匹配的前10條
            //     console.log(line)
            //     // fs.writeFileSync(fWriteName, line+ '\n', 'utf8');
            //     var tmp = 'line' + matchArr.length + ':' + line;
            //     fWrite.write(tmp + os.EOL);   //  將匹配的前10條寫入另一個文件 
            // }
        }
        index ++;
    }
});

fRead.on('end', ()=>{
    enableWriteIndex = false;
    console.log(matchArr.length)  // 總共匹配的條數
});

objReadline.on('close', ()=>{
});


4、 合並目錄下的多個文件到另一個文件

var fs = require("fs");
var path = require('path');
//配置遠程路徑
var remotePath = "./emoji";  // 相對路徑
//讀取文件目錄
fs.readdir(remotePath,function(err,files){
    if(err){
        console.log(err);
        return;
    }
    files.forEach(function(filename){
        var filedir = path.join(remotePath,filename);
        fs.stat(filedir,function(err, stats){
            if (err) throw err;
            if(stats.isFile()){
                if(/emoji/.test(filename)) {
                     console.log(filename)
                     let content = fs.readFileSync(path.join(remotePath,filename), 'utf-8')
                     fs.appendFile('/Users/caofan/desktop/Test.txt', content)
                }
            } else if(stats.isDirectory()){
                return false
            }
        });
    });
});


5、 讀取文件目錄下的所有文件,匹配內容輸出到新的文件

var fs = require('fs');
var readline = require('readline');
var path = require('path');
var os = require('os');

//解析需要遍歷的文件夾
var filePath = path.resolve('/Users/**/desktop/title');
//調用文件遍歷方法
fileDisplay(filePath);
var fWriteName = './emojis2.csv';
var matchArr = [];
var index = 1;
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(eror,stats){
                    if(eror){
                        console.warn('獲取文件stats失敗');
                    }else{
                        var isFile = stats.isFile();//是文件
                        var isDir = stats.isDirectory();//是文件夾
                        if(isFile){
                            if(/title_201711/.test(filename)) {
                                var fRead = fs.createReadStream(filedir);
                                var fWrite = fs.createWriteStream(fWriteName);
                                var enableWriteIndex = true;
                                var objReadline = readline.createInterface({      // 按行讀取
                                    input: fRead
                                });
                                objReadline.on('line', (line)=>{
                                    if (enableWriteIndex) {
                                        if(/[\]\{\}<>\[@【】「」#\*\^]/.test(line)){
                                            matchArr.push(index)
                                            if (matchArr.length <= 10000) {
                                                var tmp = line;
                                                console.log(line)
                                                fWrite.write(tmp + os.EOL);
                                            }
                                        }
                                        index ++;
                                    }
                                });
                                objReadline.on('close', ()=>{
                                    console.log(matchArr.length)
                                   // console.log(index)
                                });
                            }
                        }
                        if(isDir){
                            fileDisplay(filedir);//遞歸,如果是文件夾,就繼續遍歷該文件夾下面的文件
                        }
                    }
                })
            });
        }
    });
當然,這些功能都能通過shell命令行實現。只是有時utf8編碼問題導致正則在命令行匹配不到准確數據,所以在 node 中實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM