Node.js基本 78:创建和删除目次、流和管道

建立和删除目次

异步建立删除目次

var fs = require('fs');

fs.mkdir('stuff', function() {
    fs.readFile('readMe.txt', 'utf8', function(err, data) {
        fs.writeFile('./stuff/writeMe.txt', data, function() {
            console.log('copy successfully');
        })
    })
});
// fs.unlink("writeMe.txt", function() {
//     console.log("delete writeMe.txt file");
// })删除文件

递归删除非空文件夹

function delDir(path){
    let files = [];
    if(fs.existsSync(path)){
        files = fs.readdirSync(path);
        files.forEach((file, index) => {
            let curPath = path + "/" + file;
            if(fs.statSync(curPath).isDirectory()){
                delDir(curPath); //递归删除文件夹
            } else {
                fs.unlinkSync(curPath); //删除文件
            }
        });
        fs.rmdirSync(path);
    }
}
module.exports = delDir;

流和管道

举例:在敕令行中
《Node.js基本 78:创建和删除目次、流和管道》
ls敕令:检察当前目次下的文件和目次
grep:挑选,比方是不是包括”app”这个关键字
ls输出一个(输出一个信息),这个作为了grep敕令的输入

文档:http://nodejs.cn/api/stream.h…
比方:HTTP请求是输入流,相应是输出流.
流的运用:

  1. 处置惩罚数据,最典范的就是http效劳的时刻.请乞降相应就是流的一种表现,再比方对数据举行的处置惩罚,比方webpack,gulp也大批运用了流这个手艺,或许对文件举行打包紧缩
  2. 进步读写机能,与文件体系的读写敕令有所区别,文件体系的读写文件敕令是一次性把文件里的内容放到内存当中,假如文件很大,用这类敕令就不太适宜,要用流来处置惩罚,流会把内容放到buffer(缓存)中,一边放一边处置惩罚,如许的话机能就会很高
//把读取的文件放入一个流中
var fs = require('fs')
var myReadStream = fs.createReadStream(__dirname + '/readMe.txt')
//流是一个事宜的实例,所以能够安排监听事宜(流能够是可读的、可写的、或许可读可写的。 一切的流都是 EventEmitter 的实例。)
myReadStream.on('data',function(chunk) {//chunk是块的意义
    console.log('new chunk received')
    console.log(chunk)
})

readMe.txt文件有5000行的字符,把文件分红一个个buffer,分段处置惩罚
《Node.js基本 78:创建和删除目次、流和管道》

《Node.js基本 78:创建和删除目次、流和管道》
在参数里加utf-8,会发明,把那段字符打印出来.

on是在吸收数据的时刻的监听函数,end代表在接收数据完成以后的数据

var fs = require('fs')
var myReadStream = fs.createReadStream(__dirname + '/readMe.txt')
myReadStream.setEncoding('utf8')//编码也能够如许写
var data = ''
myReadStream.on('data',function(chunk) {
    data+=chunk
})
myReadStream.on('end',function () {
    console.log(data)
})

以上就是把一个readMe.txt当作一个流来处置惩罚.

如何写一个流

新建一个写入流.
写入的时刻直接运用方法write,参数为数据片断
把readMe.txt内里的内容写到writeMe2.txt内里

var fs = require('fs')
var myReadStream = fs.createReadStream(__dirname + '/readMe.txt')
var myWriteStream = fs.createWriteStream(__dirname+'/writeMe2.txt')//新建一个写入流.
myReadStream.setEncoding('utf8')
var data = ''
myReadStream.on('data',function(chunk) {
    myWriteStream.write(chunk)//写入的时刻直接运用方法write,参数为数据片断
})
myReadStream.on('end',function () {
    // console.log(data)
})

或许:
把’hello world’写入”writeMe2.txt’ 文件

var myWriteStream = fs.createWriteStream(__dirname+'/writeMe2.txt')
var writeData = 'hello world'
myWriteStream.write(writeData)
myWriteStream.end()
myWriteStream.on('finish',function () {
    console.log('finish')
})

运用管道更轻易得完成流的操纵

完成复制内容的操纵

var myReadStream = fs.createReadStream(__dirname + '/readMe.txt')
var myWriteStream = fs.createWriteStream(__dirname+'/writeMe2.txt')
myReadStream.pipe(myWriteStream)

把readMe的内容复制到writeMe2
管道输送

流与管道例子

加密,紧缩的历程


// 紧缩
var crypto = require('crypto');
var fs = require('fs');
var zlib = require('zlib');

var password = new Buffer(process.env.PASS || 'password');
var encryptStream = crypto.createCipher('aes-256-cbc', password);

var gzip = zlib.createGzip();
var readStream = fs.createReadStream(__dirname + "/readMe.txt"); // current file
var writeStream = fs.createWriteStream(__dirname + '/out.gz');

readStream // reads current file
    .pipe(encryptStream) // encrypts
    .pipe(gzip) // compresses
    .pipe(writeStream) // writes to out file
    .on('finish', function() { // all done
        console.log('done');
    });



// 解压
var crypto = require('crypto');
var fs = require('fs');
var zlib = require('zlib');

var password = new Buffer(process.env.PASS || 'password');
var decryptStream = crypto.createDecipher('aes-256-cbc', password);

var gzip = zlib.createGunzip();
var readStream = fs.createReadStream(__dirname + '/out.gz');

readStream // reads current file
    .pipe(gzip) // uncompresses
    .pipe(decryptStream) // decrypts
    .pipe(process.stdout) // writes to terminal
    .on('finish', function() { // finished
        console.log('done');
    });
    原文作者:马涛涛
    原文地址: https://segmentfault.com/a/1190000018421395
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞