(4)異步IO讀寫

2018-02-24 16:05 更新

要求

編寫一個(gè)程序,執(zhí)行一個(gè)異步的對文件系統(tǒng)的操作:讀取一個(gè)文件,并且在終端(標(biāo)準(zhǔn)輸出stdout)打印出這個(gè)文件中的內(nèi)容的行數(shù)。類似于執(zhí)行 cat file | wc -l 這個(gè)命令。 所要讀取的文件的完整路徑會在命令行第一個(gè)參數(shù)提供。

提示

解決這個(gè)問題將需要用到Node.js最鮮明的風(fēng)格的方式:異步。

‘’’fs.readFile()’’’方法可以滿足這個(gè)需求,這需要從傳入的回調(diào)函數(shù)中去收集數(shù)據(jù)(這些數(shù)據(jù)會作為第二參數(shù)傳遞給回調(diào)函數(shù)),而不是使用方法的返回值。

記住,Node.js 回調(diào)函數(shù)都有像如下所示的特征:

function callback (err, data) { /* ... */ }

可以通過檢查第一個(gè)參數(shù)的真假值來判斷是否有錯(cuò)誤發(fā)生。如果沒有錯(cuò)誤發(fā)生,第二個(gè)參數(shù)將獲取到一個(gè)Buffer對象。和 readFileSync() 一樣,可以傳入 ‘utf8 ‘ 作為它的第二個(gè)參數(shù),然后把回調(diào)函數(shù)作為第三個(gè)參數(shù),這樣,得到的將會是一個(gè)字符而不是 Buffer。

fs模塊API文檔

代碼

var fs = require('fs');
fs.readFile(process.argv[2], function(err,data){
    if(err) throw err;
    console.log(data.toString().split('\n').length-1);
});
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號