内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Nodejs文件操作和stream的示例分析

小編給大家分享一下Nodejs文件操作和stream的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)建站專注于秀英網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供秀英營(yíng)銷型網(wǎng)站建設(shè),秀英網(wǎng)站制作、秀英網(wǎng)頁(yè)設(shè)計(jì)、秀英網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造秀英網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供秀英網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

NodeJS文件操作

  • NodeJS除了在網(wǎng)絡(luò)方面大放異彩,它還可以對(duì)文件進(jìn)行操作,按邏輯上來說只要我們合理運(yùn)用這些api再加上一些數(shù)據(jù)處理,我們就可以完成本地很多的操作。

  • 在上一篇我們知道如果想引用一個(gè)模塊則需要使用到require,而今天要介紹的主角是fs模塊,也就是NodeJS內(nèi)置的一個(gè)文件模塊,這個(gè)模塊有很多的API供我們使用。

創(chuàng)建目錄和文件

  • 我們可以使用fs.mkdir fs.writeFile來分別創(chuàng)建目錄和文件。

  • mkdir()可以接收三個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是個(gè)可選項(xiàng)代表權(quán)限,這個(gè)我們一般不需要,第三個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),我們可以在這里面做一些處理。

/* learnNode.js */
let fs = require('fs');
fs.mkdir('js',(err)=>{
  if(err){
    console.log('出錯(cuò)')
  }else{
    console.log('未出錯(cuò)')
  }
})
  • writeFile()可以接收四個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是文件內(nèi)容,第三個(gè)可選項(xiàng)代表權(quán)限,第四個(gè)是回調(diào)函數(shù)。

/* learnNode.js */
let fs = require('fs');
fs.writeFile('./js/newJs.js','console.log("寫入這個(gè)")',(err)=>{
  if(err){
    console.log('出錯(cuò)')
  }else{
    console.log('沒出錯(cuò)')
  }
})

Nodejs文件操作和stream的示例分析

  • 可以看到我們成功創(chuàng)建了目錄并寫入了一個(gè)文件。

檢測(cè)文件

  • 我們可以通過fs.stat來檢測(cè)一個(gè)路徑的文件是為目錄還是文件,進(jìn)而可以做一些操作。

/* learnNode.js */
let fs = require('fs');
fs.stat('./js/newJs.js', (error, stats) => {
  if(error) {
    console.log(error);
    return false;
  } else {
    console.log(`是否文件:${stats.isFile()}`); 
    console.log(`是否目錄:${stats.isDirectory()}`); 
    return false;
  }
})
  • star()主要接收兩個(gè)參數(shù)第一個(gè)是要檢測(cè)的文件,第二個(gè)是一個(gè)回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)有兩個(gè)參數(shù),分別是err錯(cuò)誤和stats對(duì)象,這個(gè)對(duì)象提供有關(guān)文件的信息,我們可以對(duì)這個(gè)對(duì)象信息來進(jìn)行判斷。

Nodejs文件操作和stream的示例分析

刪除文件和刪除目錄

  • 既然我們可以使用NodeJS創(chuàng)建文件那當(dāng)然我們也可以刪除文件,主要使用的是fs.unlink``fs.rmdir這兩個(gè)API。

/* learnNode.js */
let fs = require('fs');
fs.unlink('./js/newJs.js', (err) => {
  if (err) throw err;
  console.log('文件已刪除');
});
fs.rmdir('./js',(err)=>{
  if (err) throw err;
  console.log('目錄已刪除');
})
  • 這兩個(gè)API都分別接收兩個(gè)參數(shù)是路徑和回調(diào)函數(shù),執(zhí)行node learnNode.js可以看到我們文件已經(jīng)成功刪除。

Nodejs文件操作和stream的示例分析

重命名

  • 我們可以使用fs.rename來對(duì)文件重命名。

/* learnNode.js */
let fs = require('fs');
fs.rename('oldJs.js','newJs.js',(err)=>{
  if(err){
    console.log('出錯(cuò)')
  }else{
    console.log('未出錯(cuò)')
  }
})
  • rename()可以接收三個(gè)參數(shù)第一個(gè)是路徑第二個(gè)是更改的名稱,第三個(gè)是回調(diào)函數(shù),值得注意的是,如果第一個(gè)參數(shù)和第二個(gè)參數(shù)對(duì)應(yīng)的文件所在的位置不一樣時(shí),他不會(huì)重命名之前那個(gè)文件而是直接把文件剪切放到另一個(gè)地方。

/* learnNode.js */
let fs = require('fs');
fs.rename('newJs.js','./js/oldJs.js',(err)=>{
  if(err){
    console.log('出錯(cuò)')
  }else{
    console.log('剪切到j(luò)s文件夾內(nèi)了')
  }
})

追加內(nèi)容

  • 上面我們說到創(chuàng)建文件的時(shí)候可以順便寫入東西,那么我們可不可以直接在文件追加文字呢?我們可以使用fs.appendFile。

/* learnNode.js */
let fs = require('fs');
fs.appendFile('newJs.txt','我是追加的內(nèi)容',(err)=>{
  if(err){
    console.log('出錯(cuò)')
  }else{
    console.log('追加內(nèi)容')
  }
})
  • appendFile()可以接收三個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是內(nèi)容,第三個(gè)是回調(diào)函數(shù),執(zhí)行node learnNode.js即可。

Nodejs文件操作和stream的示例分析

讀取文件和讀取目錄

  • 以上都是對(duì)文件進(jìn)行增刪改的操作,我們現(xiàn)在還需要掌握一下讀取內(nèi)容,我們可以使用fs.readFilefs.readdir分別讀取文件和讀取目錄。

/* learnNode.js */
let fs = require('fs');
fs.readFile('newJs.txt', (err, data) => {
  if(err) {
    console.log('出錯(cuò)');
  } else {
    console.log("讀取文件成功!");
    console.log(data);
  }
})

Nodejs文件操作和stream的示例分析

/* learnNode.js */
let fs = require('fs');
fs.readdir('./', (err, data) => {
  if(err) {
    console.log('出錯(cuò)');
  } else {
    console.log("讀取目錄成功!");
    console.log(data);
  }
})

Nodejs文件操作和stream的示例分析

  • 可以看到我們兩個(gè)API都是接收兩個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)也有兩個(gè)參數(shù)里面包含了data信息,我們可以打印這個(gè)data信息來獲取內(nèi)容。

stream(流)

  • 最后我們來簡(jiǎn)單聊聊stream,翻譯過來就是的意思,提到流你會(huì)想到什么,河流,水流,都是從一個(gè)源頭到另一個(gè)源頭,就像水龍頭從開關(guān)到流到地面,stream也是這樣一個(gè)過程。

  • Stream 有四種流類型:

    • Readable- 可讀操作。

    • Writable- 可寫操作。

    • Duplex- 可讀可寫操作.

    • Transform- 操作被寫入數(shù)據(jù),然后讀出結(jié)果。

  • 在stream的過程中,我們也有事件可以使用,比如檢測(cè)到錯(cuò)誤觸發(fā)的error,有數(shù)據(jù)時(shí)觸發(fā)的data。

    • data- 當(dāng)有數(shù)據(jù)可讀時(shí)觸發(fā)。

    • end- 沒有更多的數(shù)據(jù)可讀時(shí)觸發(fā)。

    • error- 在接收和寫入過程中發(fā)生錯(cuò)誤時(shí)觸發(fā)。

    • finish- 所有數(shù)據(jù)已被寫入到底層系統(tǒng)時(shí)觸發(fā)。

  • 接下來簡(jiǎn)單舉個(gè)例子理解一下吧。

讀取流

var fs = require("fs");
var data = '';
// 創(chuàng)建可讀流
var readerStream = fs.createReadStream('newJs.txt');
// 設(shè)置編碼為 utf8。
readerStream.setEncoding('UTF8');
// 處理流事件 遇到有數(shù)據(jù)時(shí)執(zhí)行這個(gè)
readerStream.on('data', function(chunk) {
  data += chunk;
  console.log(chunk,'流遇到數(shù)據(jù)了')
});
// 處理流事件 流結(jié)束時(shí)執(zhí)行這個(gè)
readerStream.on('end',function(){
  console.log(data,'流結(jié)束了');
});
 // 處理流事件 流報(bào)錯(cuò)時(shí)執(zhí)行這個(gè)
readerStream.on('error', function(err){
  console.log(err.stack);
});
console.log("程序執(zhí)行完畢");
  • 我們一開始可以創(chuàng)建一個(gè)可讀流fs.createReadStream(),參數(shù)是你要讀的文件路徑。

  • 當(dāng)遇到了數(shù)據(jù)時(shí)會(huì)執(zhí)行readerStream.on('data',callback()),如下圖所示。

  • 當(dāng)流結(jié)束時(shí)會(huì)執(zhí)行readerStream.on('end',callback()),如下圖所示。

Nodejs文件操作和stream的示例分析

寫入流

  • 我們上面演示了如何通過流讀取一個(gè)文件,接下來我們?cè)囋囃ㄟ^流寫入文件。

var fs = require("fs");
var data = '我是小盧,我再寫入流';
// 創(chuàng)建一個(gè)可以寫入的流,寫入到文件 newJs.txt 中
var writerStream = fs.createWriteStream('newJs.txt');
// 使用 utf8 編碼寫入數(shù)據(jù)
writerStream.write(data,'UTF8');
// 標(biāo)記文件末尾
writerStream.end();
// 處理流事件 完成和報(bào)錯(cuò)時(shí)執(zhí)行
writerStream.on('finish', function() {
    console.log("寫入完畢");
});
writerStream.on('error', function(err){
   console.log(err.stack);
});
console.log("程序執(zhí)行完畢");
  • 我們首先創(chuàng)建一個(gè)流,然后將data數(shù)據(jù)寫入newJs.txt文件中。

  • 當(dāng)流寫入完畢時(shí)會(huì)執(zhí)行readerStream.on('finish',callback()),如下圖所示。

Nodejs文件操作和stream的示例分析

  • 可以看到該newJs.txt文件中已經(jīng)存在了我們寫入的數(shù)據(jù)。

Nodejs文件操作和stream的示例分析

以上是“Nodejs文件操作和stream的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文題目:Nodejs文件操作和stream的示例分析
分享路徑:http://www.rwnh.cn/article34/jiscpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)頁(yè)設(shè)計(jì)公司域名注冊(cè)、靜態(tài)網(wǎng)站、小程序開發(fā)、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
即墨市| 乌拉特后旗| 双牌县| 新巴尔虎右旗| 晋江市| 成武县| 美姑县| 延寿县| 澄迈县| 神农架林区| 伽师县| 克什克腾旗| 南岸区| 浑源县| 衡水市| 文昌市| 佳木斯市| 会理县| 东乌珠穆沁旗| 平阴县| 齐齐哈尔市| 岳阳县| 田林县| 牟定县| 凯里市| 綦江县| 德保县| 武乡县| 浦东新区| 白水县| 安新县| 通州区| 莫力| 巴青县| 景德镇市| 长葛市| 庆城县| 拉萨市| 平山县| 扎囊县| 承德县|