合并脚本如下
var fs=require('fs');
var path = require('path');
var searchFileFolder="./src";
var searchFileNameIncludeString = ".d.ts";
var searchFileNameExcludeString = "";
var outputPlace = "./out/three.d.ts";
var fileList = [];
var timeStart = new Date();
var filePath = path.resolve(searchFileFolder);
var startMerge = function(files){
var arr=[];
files.forEach(function (f) {
var info=fs.statSync(f);
if(info.mode==33206){
arr.push(f);
}
});
var content='';
arr.forEach(function (f) {
var c= fs.readFileSync(f);
content+=c.toString()+'\n';
});
fs.writeFile(outputPlace,content,{'encoding':'utf-8','flag':'w','mode':438},function(err){
console.log("写入结束",err);
});
}
var startSearchFileSecond = function(searchPath,downCallBack){
var readdir = promisify(fs.readdir);
var stat = promisify(fs.stat);
var readFile = promisify(fs.readFile);
function promisify(fn) {
return function() {
var args = arguments;
return new Promise(function(resolve, reject) {
[].push.call(args, function(err, result) {
if(err) {
console.log(err)
reject(err);
}else {
resolve(result);
}
});
fn.apply(null, args);
});
}
}
function readDirRecur(file, callback) {
return readdir(file).then((files) => {
files = files.map((item) => {
var fullPath = file + '/' + item;
return stat(fullPath).then((stats) => {
if (stats.isDirectory()) {
return readDirRecur(fullPath, callback);
} else {
if(item[0] == '.'){
}
else
{
if(item.indexOf(searchFileNameIncludeString)>=0&&(searchFileNameExcludeString==""||item.indexOf(searchFileNameExcludeString)<0))
callback && callback(fullPath)
}
}
})
});
return Promise.all(files);
});
}
readDirRecur(searchPath, function(filePath) {
fileList.push(filePath)
}).then(function() {
console.log('done', new Date() - timeStart);
console.log("一共找到文件数目:",fileList.length);
console.log("开始写入");
if(downCallBack)downCallBack(fileList);
}).catch(function(err) {
console.log(err);
});
}
var startSearchFileFirst = function(searchPath,downCallBack){
function readDirRecur(folder, callback) {
fs.readdir(folder, function(err, files) {
var count = 0
var checkEnd = function() {
++count == files.length && callback()
}
files.forEach(function(file) {
var fullPath = folder + '/' + file;
fs.stat(fullPath, function(err, stats) {
if (stats.isDirectory()) {
return readDirRecur(fullPath, checkEnd);
}
else
{
if(file[0]=='.')
{
}
else if(file.indexOf(searchFileNameIncludeString)>=0&&(searchFileNameExcludeString==""||file.indexOf(searchFileNameExcludeString)<0))
{
fileList.push(fullPath)
}
checkEnd()
}
})
})
files.length === 0 && callback()
})
}
readDirRecur(searchPath, function(filePath) {
console.log('done', new Date() - timeStart);
console.log("一共找到文件数目:",fileList.length);
console.log("开始写入");
if(downCallBack)downCallBack(fileList);
})
}
startSearchFileFirst(filePath,startMerge);
nodejs关于IO流的一些基础用法
var fs = require('fs');
fs.stat('html', function (error, stats) {
if (error) {
console.log(error);
return false;
}
console.log('文件:' + stats.isFile());
console.log('目录:' + stats.isDirectory());
})
fs.mkdir('css', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('创建目录成功');
})
fs.writeFile('123.txt', '你好nodejs 覆盖', 'utf8', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('写入成功');
})
fs.appendFile('123.txt', '这是写入的内容\n', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('写入成功');
})
fs.readFile('123.txt', function (error, data) {
if (error) {
console.log(error);
return false;
}
console.log(data.toString());
})
fs.readdir('html', function (error, data) {
if (error) {
console.log(error);
return false;
}
console.log(data);
})
fs.rename('html/index.html', 'html/news.html', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('修改名字成功');
})
fs.rmdir('abc目录', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('删除目录成功');
})
fs.unlink('index.txt', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('删除文件成功');
})
var fileReadStream = fs.createReadStream('data1.json');
var str = '';
fileReadStream.on('data', (data) => {
console.log("接收到" + data.length);
str += data;
})
fileReadStream.on('end', () => {
console.log(" --- 结束 ---");
console.log(str);
})
fileReadStream.on('error', (error) => {
console.log(error)
})
var fs = require("fs");
var data = "我是从数据库获取的数据,我要保存起来";
var writerStream = fs.createWriteStream('output.txt');
writerStream.write(data, 'UTF8');
writerStream.end();
writerStream.on('finish', function () {
console.log("写入完成。");
});
writerStream.on('error', function (error) {
console.log(error.stack);
});
console.log("程序执行完毕");
var fs = require("fs");
var readerStream = fs.createReadStream('input.txt');
var writerStream = fs.createWriteStream('output.txt');
readerStream.pipe(writerStream);
console.log("程序执行完毕");
var fs = require('fs');
fs.access('package.json', (err) => {
console.log(err ? '目录/文件不存在' : '文件存在,可以进行读写');
});
if (fs.existsSync('/etc/passwd')) {
console.log('文件已存在');
}
var path = require('path');
function CopyDirectory(src, dest) {
if (!fs.existsSync(src)) {
return false;
}
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest);
}
var dirs = fs.readdirSync(src);
dirs.forEach(function (item) {
var item_path = path.join(src, item);
var temp = fs.statSync(item_path);
if (temp.isFile()) {
fs.copyFileSync(item_path, path.join(dest, item));
} else if (temp.isDirectory()) {
CopyDirectory(item_path, path.join(dest, item));
}
});
}
function DeleteDirectory(dir) {
if (fs.existsSync(dir) == true) {
var files = fs.readdirSync(dir);
files.forEach(function (item) {
var item_path = path.join(dir, item);
if (fs.statSync(item_path).isDirectory()) {
DeleteDirectory(item_path);
} else {
fs.unlinkSync(item_path);
}
});
fs.rmdirSync(dir);
}
}