nodeAPI--FS
fs是唯一一个同时提供同步和异步API的模块;
读取文件夹文件名,数组形式返回:
var fs = require('fs'); //async fs.readdir('./',function(err,files) { console.log(files); }); //sync var files = fs.readdirSync('../') console.log(files));
//fs.readFile()读取文件;
process全局对象中包含三个流对象:stdin,stdout,stderr; console.log()内部就是在指定字符后加上\n字符,并将其写到stdout流中;
流:node中有各种流,简而言之,当涉及不断地对数据进行读写时,流就出现了;
Node命令行(CLI):
- argv:
- process.argv包含了Node程序运行时的参数值;以数组返回,第一个元素是node,第二个元素是执行的文件路径,接着是命令行后跟的参数;
- 所以获取参数process.argv.slice(2);
- 工作目录:
- __dirname:获取执行文件时该文件所在目录;
- process.cwd():获取程序运行时,当前的工作目录;
- process.chdir('/'):更改目录,如
//显示当前根目录: process.chdir('/'); console.log(process.cwd()); //其他目录 process.chdir('D:/Dict'); console.log(process.cwd());
- process.env:数组形式返回电脑环境变量,可以以关联表查找;
- process.exit(code);退出程序,省略或code为0表示成功退出,1表示失败退出,一般同用console.error();
- ANSI转义码:如
console.log('\033[90m' + data.replace(/(.*)/g, ' $1') + '\033[39m');
\033表示转义开始;[表示颜色设置;m表示颜色设置结束;如果结尾有还原颜色的设置,表示只改变这一部分颜色;
读写文件例子:
1 var fs = require('fs'), 2 cwd = process.cwd; //当前绝对路径 3 stdin = process.stdin, 4 stdout = process.stdout, //简化 5 stats = []; 6 7 fs.readdir(cwd(), function (err, files) { 8 console.log(' '); 9 if(!files.length) { 10 return console.log('\033[31m No files to show!\033[39m\n'); 11 } 12 console.log('Select which file or directory you want to see\n'); 13 14 function file(i) { 15 var filename = files[i]; 16 fs.stat(__dirname + '/' + filename, function (err, stat) { //文件或文件夹的原目录 17 stats[i] = stat; 18 if(stat.isDirectory()) { //文件夹的话 19 console.log(' ' + i + ' \033[36m' + filename + '/\033[39m'); 20 } else { 21 console.log(' ' + i + ' \033[90m' + filename + '\033[39m'); 22 } 23 if(++i == files.length) { 24 read(); 25 } else { 26 file(i); 27 } 28 }); 29 }; 30 function read() { 31 console.log(' '); 32 stdout.write(' \033[33mEnter your choice: \033[39m'); 33 stdin.resume(); //等待用户输入 34 stdin.setEncoding('utf8'); //设置流编码‘utf8'支持特殊字符; 35 stdin.on('data', option); //监听data事件; 36 }; 37 function option(data) { 38 var filename = files[Number(data)]; 39 if(!filename) { 40 stdout.write(' \033[31mEnter your choice: \033[39m'); 41 } else { 42 stdin.pause(); //停止输入 43 if(stats[Number(data)].isDirectory()) { 44 fs.readdir(__dirname + '/' + filename, function(err, files) { 45 console.log(' '); 46 console.log(' (' + files.length + ' files' + ')'); 47 files.forEach(function(file) { 48 console.log(' - ' + files); 49 }); 50 console.log(' '); 51 }); 52 } else { 53 fs.readFile(__dirname + '/' + filename, 'utf8', function(err, data) { 54 console.log(' '); 55 console.log('\033[90m' + data.replace(/(.*)/g, ' $1') + '\033[39m'); 56 }) 57 } 58 } 59 }; 60 file(0); 61 });
stream:
var stream = fs,createReadStream(_filename); //为文件创建一个可读Stream对象; //每次读取可变大小内容块,且每次读取后会触发回调事件; stream.on('data', function(chunk) {
//
});
stream.on('end',function(chunk){
//
});
监视:
- watchFiles(); //监视文件;
//监视当前目录下files目录中的.css文件 var fs = require('fs'); process.chdir('files') var files = fs.readdirSync(process.cwd()); files.forEach(function(file) { if(/\.css/.test(file)) { fs.watchFile(process.cwd() + '/' + file, function() { console.log('-' + file + ' changed!'); }) } })
- watch();//监视目录;
var fs = require('fs'); fs.watch(process.cwd(), function (event, filename) { console.log(event,filename); });