国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Node.js基礎(chǔ) 78:創(chuàng)建和刪除目錄、流和管道

MrZONT / 990人閱讀

創(chuàng)建和刪除目錄

異步創(chuàng)建刪除目錄

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;
流和管道

舉例:在命令行中

ls命令:查看當(dāng)前目錄下的文件和目錄
grep:篩選,例如是否包含"app"這個(gè)關(guān)鍵字
ls輸出一個(gè)(輸出一個(gè)信息),這個(gè)作為了grep命令的輸入

文檔:http://nodejs.cn/api/stream.h...
例如:HTTP請(qǐng)求是輸入流,響應(yīng)是輸出流.
流的應(yīng)用:

處理數(shù)據(jù),最典型的就是http服務(wù)的時(shí)候.請(qǐng)求和響應(yīng)就是流的一種體現(xiàn),再比如對(duì)數(shù)據(jù)進(jìn)行的處理,例如webpack,gulp也大量運(yùn)用了流這個(gè)技術(shù),或者對(duì)文件進(jìn)行打包壓縮

提高讀寫(xiě)性能,與文件系統(tǒng)的讀寫(xiě)命令有所區(qū)別,文件系統(tǒng)的讀寫(xiě)文件命令是一次性把文件里的內(nèi)容放到內(nèi)存當(dāng)中,如果文件很大,用這種命令就不太合適,要用流來(lái)處理,流會(huì)把內(nèi)容放到buffer(緩存)中,一邊放一邊處理,這樣的話性能就會(huì)很高

//把讀取的文件放入一個(gè)流中
var fs = require("fs")
var myReadStream = fs.createReadStream(__dirname + "/readMe.txt")
//流是一個(gè)事件的實(shí)例,所以可以放置監(jiān)聽(tīng)事件(流可以是可讀的、可寫(xiě)的、或者可讀可寫(xiě)的。 所有的流都是 EventEmitter 的實(shí)例。)
myReadStream.on("data",function(chunk) {//chunk是塊的意思
    console.log("new chunk received")
    console.log(chunk)
})

readMe.txt文件有5000行的字符,把文件分成一個(gè)個(gè)buffer,分段處理


在參數(shù)里加utf-8,會(huì)發(fā)現(xiàn),把那段字符打印出來(lái).

on是在接收數(shù)據(jù)的時(shí)候的監(jiān)聽(tīng)函數(shù),end代表在接受數(shù)據(jù)完成之后的數(shù)據(jù)

var fs = require("fs")
var myReadStream = fs.createReadStream(__dirname + "/readMe.txt")
myReadStream.setEncoding("utf8")//編碼也可以這樣寫(xiě)
var data = ""
myReadStream.on("data",function(chunk) {
    data+=chunk
})
myReadStream.on("end",function () {
    console.log(data)
})

以上就是把一個(gè)readMe.txt當(dāng)做一個(gè)流來(lái)處理.

如何寫(xiě)一個(gè)流

新建一個(gè)寫(xiě)入流.
寫(xiě)入的時(shí)候直接使用方法write,參數(shù)為數(shù)據(jù)片段
把readMe.txt里面的內(nèi)容寫(xiě)到writeMe2.txt里面

var fs = require("fs")
var myReadStream = fs.createReadStream(__dirname + "/readMe.txt")
var myWriteStream = fs.createWriteStream(__dirname+"/writeMe2.txt")//新建一個(gè)寫(xiě)入流.
myReadStream.setEncoding("utf8")
var data = ""
myReadStream.on("data",function(chunk) {
    myWriteStream.write(chunk)//寫(xiě)入的時(shí)候直接使用方法write,參數(shù)為數(shù)據(jù)片段
})
myReadStream.on("end",function () {
    // console.log(data)
})

或者:
把"hello world"寫(xiě)入""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")
})
使用管道更方便得實(shí)現(xiàn)流的操作

實(shí)現(xiàn)復(fù)制內(nèi)容的操作

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

把readMe的內(nèi)容復(fù)制到writeMe2
管道運(yùn)送

流與管道例子

加密,壓縮的過(guò)程

// 壓縮
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");
    });

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/102484.html

相關(guān)文章

  • [譯]關(guān)于Node.js streams你需要知道的一切

    摘要:當(dāng)一個(gè)客戶(hù)端的響應(yīng)對(duì)象是一個(gè)可讀流,那么在服務(wù)器端這就是一個(gè)可寫(xiě)流。的模塊給我們提供了一個(gè)可以操作任何文件的可讀流通過(guò)方法創(chuàng)建。創(chuàng)建一個(gè)可讀流創(chuàng)建可讀流,我們需要類(lèi)創(chuàng)建一個(gè)可讀流非常簡(jiǎn)單。可以通過(guò)修改可讀流配置里面的方法實(shí)現(xiàn)。 Node.js的stream模塊是有名的應(yīng)用困難,更別說(shuō)理解了。那現(xiàn)在可以告訴你,這些都不是問(wèn)題了。 多年來(lái),開(kāi)發(fā)人員在那里創(chuàng)建了大量的軟件包,其唯一目的就是使...

    bang590 評(píng)論0 收藏0
  • Java IO

    摘要:分類(lèi)一按操作方式類(lèi)結(jié)構(gòu)字節(jié)流和字符流字節(jié)流以字節(jié)為單位,每次次讀入或讀出是位數(shù)據(jù)。該對(duì)象并不是流體系中的一員,其封裝了字節(jié)流,同時(shí)還封裝了一個(gè)緩沖區(qū)字符數(shù)組,通過(guò)內(nèi)部的指針來(lái)操作字符數(shù)組中的數(shù)據(jù)。 分類(lèi)一:按操作方式(類(lèi)結(jié)構(gòu)) 字節(jié)流和字符流: 字節(jié)流:以字節(jié)為單位,每次次讀入或讀出是8位數(shù)據(jù)。可以讀任何類(lèi)型數(shù)據(jù)。 字符流:以字符為單位,每次次讀入或讀出是16位數(shù)據(jù)。其只能讀取字符類(lèi)...

    Salamander 評(píng)論0 收藏0
  • 第十五章 輸入輸出系統(tǒng)

    摘要:在包下主要包括輸入輸出兩種流,每種輸入輸出流又可分為字節(jié)流和字符流兩大類(lèi)。輸入輸出是從程序運(yùn)行所在的內(nèi)存的角度而言的。的輸入流主要由和作為基類(lèi),而輸出流主要由和作為基類(lèi)。 本章主要參考和摘自瘋狂java講義上面的(java編程思想的后面看過(guò)后有新的內(nèi)容再補(bǔ)充進(jìn)去吧)。  輸入輸出是所有程序都必需的部分————使用輸入機(jī)制允許程序讀取外部數(shù)據(jù)(包括磁盤(pán)、光盤(pán)等存儲(chǔ)設(shè)備上的數(shù)據(jù)和用戶(hù)輸入的...

    hankkin 評(píng)論0 收藏0
  • gulp詳細(xì)基礎(chǔ)教程

    摘要:核心概念流流,簡(jiǎn)單來(lái)說(shuō)就是建立在面向?qū)ο蠡A(chǔ)上的一種抽象的處理數(shù)據(jù)的工具。類(lèi)型,設(shè)置輸出路徑以某個(gè)路徑的某個(gè)組成部分為基礎(chǔ)向后拼接。 一、gulp簡(jiǎn)介 1.gulp是什么? gulp是前端開(kāi)發(fā)過(guò)程中一種基于流的代碼構(gòu)建工具,是自動(dòng)化項(xiàng)目的構(gòu)建利器;它不僅能對(duì)網(wǎng)站資源進(jìn)行優(yōu)化,而且在開(kāi)發(fā)過(guò)程中很多重復(fù)的任務(wù)能夠使用正確的工具自動(dòng)完成;使用它,不僅可以很愉快的編寫(xiě)代碼,而且大大提高我們的工...

    xuhong 評(píng)論0 收藏0
  • gulp詳細(xì)基礎(chǔ)教程

    摘要:核心概念流流,簡(jiǎn)單來(lái)說(shuō)就是建立在面向?qū)ο蠡A(chǔ)上的一種抽象的處理數(shù)據(jù)的工具。類(lèi)型,設(shè)置輸出路徑以某個(gè)路徑的某個(gè)組成部分為基礎(chǔ)向后拼接。 一、gulp簡(jiǎn)介 1.gulp是什么? gulp是前端開(kāi)發(fā)過(guò)程中一種基于流的代碼構(gòu)建工具,是自動(dòng)化項(xiàng)目的構(gòu)建利器;它不僅能對(duì)網(wǎng)站資源進(jìn)行優(yōu)化,而且在開(kāi)發(fā)過(guò)程中很多重復(fù)的任務(wù)能夠使用正確的工具自動(dòng)完成;使用它,不僅可以很愉快的編寫(xiě)代碼,而且大大提高我們的工...

    vibiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<