Node.js文件模块fs读取文件的两种方式及比较:read和readFile


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

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM