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()); }); }); } })