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

 

 

版权声明:本文为TangcongBlogs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/TangcongBlogs/p/14922017.html