Node常用內置模塊


node內置的fs模塊就是文件系統模塊,負責讀寫文件

fs同時提供了同步異步的方法

'use strict'; var fs = require('fs'); fs.readFile('test.txt', 'utf-8', function (err, data) { if (err) { console.log(err); } else { console.log(data); } });
test.txt必須在同一目錄下,文件編碼問utf-8,由於err是否為null就是判斷是否出錯的標志,所以通常的判斷邏輯總是:
if (err) { // 出錯了 } else { // 正常 }

下面的例子演示了如何讀取一個圖片文件:

'use strict'; var fs = require('fs'); fs.readFile('sample.png', function (err, data) { if (err) { console.log(err); } else { console.log(data); console.log(data.length + ' bytes'); } });
當讀取二進制文件時,不傳入文件編碼時,回調函數的data將返回一個buffer對象,在node中,buffer就是一個包含一個或任意個字節的數組(注意和array不同)
//buffer ->string

var text=data.toString('utf-8');
console.log(text)
或者將string轉換為buffer
var buf=new Buffer(text,'utf-8');
console.log(buf);
寫文件
將數據寫入文件是通過fs.writeFile()實現的
'use strict'; var fs = require('fs'); var data = 'Hello, Node.js'; fs.writeFile('output.txt', data, function (err) { if (err) { console.log(err); } else { console.log('ok.'); } });
使用fs.stat()來獲取文件的大小,創建日期等信息
'use strict'; var fs = require('fs'); fs.stat('sample.txt', function (err, stat) { if (err) { console.log(err); } else { // 是否是文件: console.log('isFile: ' + stat.isFile()); // 是否是目錄: console.log('isDirectory: ' + stat.isDirectory()); if (stat.isFile()) { // 文件大小: console.log('size: ' + stat.size); // 創建時間, Date對象: console.log('birth time: ' + stat.birthtime); // 修改時間, Date對象: console.log('modified time: ' + stat.mtime); } } });
運行結果如下:
isFile: true isDirectory: false size: 181 birth time: Fri Dec 11 2015 09:43:41 GMT+0800 (CST) modified time: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)

stream是Node.js提供的又一個僅在服務區端可用的模塊,目的是支持“流”這種數據結構。

什么是流?流是一種抽象的數據結構。想象水流,當在水管中流動時,就可以從某個地方(例如自來水廠)源源不斷地到達另一個地方(比如你家的洗手池)。我們也可以把數據看成是數據流,比如你敲鍵盤的時候,就可以把每個字符依次連起來,看成字符流。這個流是從鍵盤輸入到應用程序,實際上它還對應着一個名字:標准輸入流(stdin)。

如果應用程序把字符一個一個輸出到顯示器上,這也可以看成是一個流,這個流也有名字:標准輸出流(stdout)。流的特點是數據是有序的,而且必須依次讀取,或者依次寫入,不能像Array那樣隨機定位。

--采用自廖雪峰大神的教程

var fs = require('fs'); // 打開一個流: var rs = fs.createReadStream('sample.txt', 'utf-8'); rs.on('data', function (chunk) { console.log('DATA:') console.log(chunk); }); rs.on('end', function () { console.log('END'); }); rs.on('error', function (err) { console.log('ERROR: ' + err); });

data事件可能會有多次,每次傳遞的chunk是流的一部分數據。

要以流的形式寫入文件,只需要不斷調用write()方法,最后以end()結束:

var fs = require('fs'); var ws1 = fs.createWriteStream('output1.txt', 'utf-8'); ws1.write('使用Stream寫入文本數據...\n'); ws1.write('END.'); ws1.end(); var ws2 = fs.createWriteStream('output2.txt'); ws2.write(new Buffer('使用Stream寫入二進制數據...\n', 'utf-8')); ws2.write(new Buffer('END.', 'utf-8')); ws2.end();
所有可以讀取數據的流都繼承自stream.Readable,所有可以寫入的流都繼承自stream.Writable


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM