1. fs.read()讀取文件數據
語法格式:
fs.read(fd, buffer, offset, length, position, callback)
從文件描述符fd中讀取文件數據。
-
fd - 通過 fs.open() 方法返回的文件描述符。
-
buffer - 數據寫入的緩沖區。
-
offset - 緩沖區寫入的寫入偏移量。
-
length - 要從文件中讀取的字節數。
-
position - 文件讀取的起始位置,如果 position 的值為 null,則會從當前文件指針的位置讀取。
-
callback - 回調函數,有三個參數err, bytesRead, buffer,err 為錯誤信息, bytesRead 表示讀取的字節數,buffer 為緩沖區對象。
使用fs.read()方法讀取文件內容時,首先需要一個文件描述符fd,fs.read()方法可以實現部分文件內容的讀取。通過length和position參數可以指定讀取文件內容的長度和讀取內容的起始位置。
例子:
var fs = require("fs"); var buf = new Buffer.alloc(1024); console.log("准備打開已存在的文件!"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("文件打開成功!"); console.log("准備讀取文件:"); fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){ if (err){ console.log(err); } console.log(bytes + " 字節被讀取"); // 僅輸出讀取的字節
if(bytes > 0){ console.log(buf.slice(0, bytes).toString()); } }); });
2. fs.readFile()讀取文件內容
fs.readFile(filename[, options], callback)
讀取文件的全部內容
- filename表示要讀取的文件
-
callback回調函數有2個參數 (err, data),參數 data 是文件的內容。如果沒有指定參數encoding, 則返回值為Buffer。
fs.readFile()方法能且只能讀取文件的全部內容,通過設置編碼方式可以以字符串或Buffer的形式返回讀結果。
例子:
fs.readFile('./txt/3.txt',function(err,data){ if(err){ console.log(err) } console.log("讀取到的數據:"+data.toString()) })
3. fs.read()和fs.readFile()方法的比較
本質上講,fs.readFile()方法是對fs.read()方法的進一步封裝,fs.readFile()方法可以方便的讀取文件的全部內容。
使用fs.readFile()方法讀/etc/passwd文件全部內容:
fs.readFile('/txt/01.js', function(err, data){ //文件內容
console.log(data.toString()); })
相比fs.readFile()方法,使用fs.read()方法讀取文件的全部內容可操作性要強很多。首先要用fs.stat判斷文件的大小,然后使用fs.open()創建文件描述符,最后再使用fs.read()方法讀取文件內容。
使用fs.read()方法讀txt/01.js文件全部內容:
fs.stat('txt/01.js', function(err, stat) { if(stat&&stat.isFile()){ fs.open('txt/01.js', 'r', function(err, fd){ //創建一個與文件大小相同的緩沖區
var readBuffer = new Buffer(stat.size); var len = stat.size; var offset = 0; var filePostion = 0; fs.read(fd, readBuffer, offset, len, filePostion, function(err, readByte, readResult){ //文件內容
console.log(readResult.toString()); }); }); } })
