Node.js 文件系統封裝在 fs 模塊是中,它提供了文件的讀取、寫入、更名、刪除、遍歷目錄、鏈接等POSIX 文件系統操作。
與其他模塊不同的是,fs 模塊中所有的操作都提供了異步的和 同步的兩個版本,例如讀取文件內容的函數有異步的 fs.readFile() 和同步的 fs.readFileSync()。我們以幾個函數為代表,介紹 fs 常用的功能,并列出 fs 所有函數 的定義和功能。
Node.js讀取文件函數語法如下:
fs.readFile(filename,[encoding],[callback(err,data)])
如果不指 定 encoding,則 callback 就是第二個參數?;卣{函數提供兩個參數 err 和 data,err 表 示有沒有錯誤發生,data 是文件內容。如果指定了 encoding,data 是一個解析后的字符 串,否則 data 將會是以 Buffer 形式表示的二進制數據。
例如以下程序,我們從content.txt 中讀取數據,但不指定編碼:
var fs = require('fs'); fs.readFile('content.txt', function(err, data) { if(err) { console.error(err); } else{ console.log(data); } });
假設content.txt 中的內容是UTF-8 編碼的 Text 文本文件示例,運行結果如下:
<Buffer 54 65 78 74 20 e6 96 87 e6 9c ac e6 96 87 e4 bb b6 e7 a4 ba e4 be 8b>
這個程序以二進制的模式讀取了文件的內容,data 的值是 Buffer 對象。如果我們給
fs.readFile 的 encoding 指定編碼:
var fs = require('fs'); fs.readFile('content.txt', 'utf-8', function(err, data) { if (err) { console.error(err); } else { console.log(data); } });
那么運行結果則是:
Text 文本文件示例
當讀取文件出現錯誤時,err 將會是 Error 對象。如果content.txt 不存在,運行前面 的代碼則會出現以下結果:
{ [Error: ENOENT, no such file or directory 'content.txt'] errno: 34, code: 'ENOENT', path: 'content.txt' }
fs.readFileSync(filename, [encoding])是 fs.readFile 同步的版本。它接受 的參數和 fs.readFile 相同,而讀取到的文件內容會以函數返回值的形式返回。如果有錯 誤發生,fs 將會拋出異常,你需要使用 try 和 catch 捕捉并處理異常。
注意:與同步I/O 函數不同,Node.js 中異步函數大多沒有返回值。
fs.open(path, flags, [mode], [callback(err, fd)])是POSIX open 函數的 封裝,與C 語言標準庫中的 fopen 函數類似。它接受兩個必選參數,path 為文件的路徑, flags 可以是以下值。
fs.read語法格式如下:
fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)])
參數說明:
以下是一個使用 fs.open 和 fs.read 的示例。
var fs = require('fs'); fs.open('content.txt', 'r', function(err, fd) { if(err) { console.error(err); return; } var buf = newBuffer(8); fs.read(fd, buf, 0, 8, null, function(err, bytesRead, buffer) { if(err) { console.error(err); return; } console.log('bytesRead: ' + bytesRead); console.log(buffer); }) });
運行結果是:
bytesRead: 8 <Buffer 54 65 78 74 20 e6 96 87>
一般來說,除非必要,否則不要使用這種方式讀取文件,因為它要求你手動管理緩沖區 和文件指針,尤其是在你不知道文件大小的時候,這將會是一件很麻煩的事情。
更多詳情可點擊查看:http://nodejs.org/api/fs.html