創(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命令:查看當前目錄下的文件和目錄
grep:篩選,例如是否包含"app"這個關鍵字
ls輸出一個流(輸出一個信息),這個流作為了grep命令的輸入
文檔:http://nodejs.cn/api/stream.h...
例如:HTTP請求是輸入流,響應是輸出流.
流的應用:
處理數(shù)據(jù),最典型的就是http服務的時候.請求和響應就是流的一種體現(xiàn),再比如對數(shù)據(jù)進行的處理,例如webpack,gulp也大量運用了流這個技術,或者對文件進行打包壓縮
提高讀寫性能,與文件系統(tǒng)的讀寫命令有所區(qū)別,文件系統(tǒng)的讀寫文件命令是一次性把文件里的內容放到內存當中,如果文件很大,用這種命令就不太合適,要用流來處理,流會把內容放到buffer(緩存)中,一邊放一邊處理,這樣的話性能就會很高
//把讀取的文件放入一個流中 var fs = require("fs") var myReadStream = fs.createReadStream(__dirname + "/readMe.txt") //流是一個事件的實例,所以可以放置監(jiān)聽事件(流可以是可讀的、可寫的、或者可讀可寫的。 所有的流都是 EventEmitter 的實例。) myReadStream.on("data",function(chunk) {//chunk是塊的意思 console.log("new chunk received") console.log(chunk) })
readMe.txt文件有5000行的字符,把文件分成一個個buffer,分段處理
在參數(shù)里加utf-8,會發(fā)現(xiàn),把那段字符打印出來.
on是在接收數(shù)據(jù)的時候的監(jiān)聽函數(shù),end代表在接受數(shù)據(jù)完成之后的數(shù)據(jù)
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,參數(shù)為數(shù)據(jù)片段
把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,參數(shù)為數(shù)據(jù)片段 }) 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") })使用管道更方便得實現(xiàn)流的操作
實現(xiàn)復制內容的操作
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"); });
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/102484.html
摘要:當一個客戶端的響應對象是一個可讀流,那么在服務器端這就是一個可寫流。的模塊給我們提供了一個可以操作任何文件的可讀流通過方法創(chuàng)建。創(chuàng)建一個可讀流創(chuàng)建可讀流,我們需要類創(chuàng)建一個可讀流非常簡單。可以通過修改可讀流配置里面的方法實現(xiàn)。 Node.js的stream模塊是有名的應用困難,更別說理解了。那現(xiàn)在可以告訴你,這些都不是問題了。 多年來,開發(fā)人員在那里創(chuàng)建了大量的軟件包,其唯一目的就是使...
摘要:分類一按操作方式類結構字節(jié)流和字符流字節(jié)流以字節(jié)為單位,每次次讀入或讀出是位數(shù)據(jù)。該對象并不是流體系中的一員,其封裝了字節(jié)流,同時還封裝了一個緩沖區(qū)字符數(shù)組,通過內部的指針來操作字符數(shù)組中的數(shù)據(jù)。 分類一:按操作方式(類結構) 字節(jié)流和字符流: 字節(jié)流:以字節(jié)為單位,每次次讀入或讀出是8位數(shù)據(jù)。可以讀任何類型數(shù)據(jù)。 字符流:以字符為單位,每次次讀入或讀出是16位數(shù)據(jù)。其只能讀取字符類...
摘要:在包下主要包括輸入輸出兩種流,每種輸入輸出流又可分為字節(jié)流和字符流兩大類。輸入輸出是從程序運行所在的內存的角度而言的。的輸入流主要由和作為基類,而輸出流主要由和作為基類。 本章主要參考和摘自瘋狂java講義上面的(java編程思想的后面看過后有新的內容再補充進去吧)。 輸入輸出是所有程序都必需的部分————使用輸入機制允許程序讀取外部數(shù)據(jù)(包括磁盤、光盤等存儲設備上的數(shù)據(jù)和用戶輸入的...
摘要:核心概念流流,簡單來說就是建立在面向對象基礎上的一種抽象的處理數(shù)據(jù)的工具。類型,設置輸出路徑以某個路徑的某個組成部分為基礎向后拼接。 一、gulp簡介 1.gulp是什么? gulp是前端開發(fā)過程中一種基于流的代碼構建工具,是自動化項目的構建利器;它不僅能對網(wǎng)站資源進行優(yōu)化,而且在開發(fā)過程中很多重復的任務能夠使用正確的工具自動完成;使用它,不僅可以很愉快的編寫代碼,而且大大提高我們的工...
摘要:核心概念流流,簡單來說就是建立在面向對象基礎上的一種抽象的處理數(shù)據(jù)的工具。類型,設置輸出路徑以某個路徑的某個組成部分為基礎向后拼接。 一、gulp簡介 1.gulp是什么? gulp是前端開發(fā)過程中一種基于流的代碼構建工具,是自動化項目的構建利器;它不僅能對網(wǎng)站資源進行優(yōu)化,而且在開發(fā)過程中很多重復的任務能夠使用正確的工具自動完成;使用它,不僅可以很愉快的編寫代碼,而且大大提高我們的工...
閱讀 1614·2023-04-26 02:43
閱讀 3029·2021-11-11 16:54
閱讀 1356·2021-09-23 11:54
閱讀 1174·2021-09-23 11:22
閱讀 2369·2021-08-23 09:45
閱讀 854·2019-08-30 15:54
閱讀 3104·2019-08-30 15:53
閱讀 3192·2019-08-30 15:53