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

資訊專欄INFORMATION COLUMN

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

MrZONT / 994人閱讀

創(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

相關文章

  • [譯]關于Node.js streams你需要知道的一切

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

    bang590 評論0 收藏0
  • Java IO

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

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

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

    hankkin 評論0 收藏0
  • gulp詳細基礎教程

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

    xuhong 評論0 收藏0
  • gulp詳細基礎教程

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

    vibiu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<