創(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
摘要:當(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)建了大量的軟件包,其唯一目的就是使...
摘要:分類(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)...
摘要:在包下主要包括輸入輸出兩種流,每種輸入輸出流又可分為字節(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ù)輸入的...
摘要:核心概念流流,簡(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ě)代碼,而且大大提高我們的工...
摘要:核心概念流流,簡(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ě)代碼,而且大大提高我們的工...
閱讀 1599·2023-04-26 02:43
閱讀 2997·2021-11-11 16:54
閱讀 1344·2021-09-23 11:54
閱讀 1165·2021-09-23 11:22
閱讀 2359·2021-08-23 09:45
閱讀 845·2019-08-30 15:54
閱讀 3094·2019-08-30 15:53
閱讀 3184·2019-08-30 15:53