一、讀取文件
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 中實現。