Node.js文件系统模块fs的两种文件写入方式比较:fs.write()和fs. writeFile()

 2015年11月04日    1181     声明


昨天介绍了Node.js的文件系统模块fs中两种读取文件的方法。不只读取文件,写入文件同样也有两种方法:fs.write()fs.writeFile()

  1. fs.write()将数据写入到文件
  2. fs.writeFile()将Buffer或字符串写入到文件
  3. fs.write()fs.writeFile()方法的比较


1. fs.write()将数据写入到文件

fs.write(fd, buffer, offset, length[, position], callback)
fs.write(fd, data[, position[, encoding]], callback)

fs.write()有上面两种形式,可以将一个bufferdata字符串写入到文件描述符fd指定的文件中。

fs.write(fd, buffer, offset, length[, position], callback)参数如下:

  • buffer是一个缓冲区,是要写入到文件的数据。

  • offset用于确认buffer写入数据时的偏移量。

  • length是一个整型值,指定写入数据的长度。

    通过offsetlength可以确定buffer的哪个部分将会被写入文件。

  • position是一个整型值,指写入文件的起始位置,如果positiontypeof position !== 'number',将会从文件当前的位置写入数据。

  • callback中回调函数,其中包含了三个参数(err, written, buffer),分别表示:错误、写入文件的字节数、缓冲区。

fs.write(fd, data[, position[, encoding]], callback)参数如下

  • data要写入文件的字符串(当写入数据不是Buffer时,将会被转为字符串)。

  • position是一个整型值,指写入文件的起始位置,如果positiontypeof position !== 'number',将会从文件当前的位置写入数据。

  • encoding指定写入字符串的编码方式。

  • callback中回调函数,其中包含了三个参数(err, written, buffer),分别表示:错误、写入文件的字节数、缓冲区。

使用fs.write()方法向文件写入内容时,首先需要一个文件描述符fd,创建文件描述符fd可以使用fs.open()方法。

提示:fs.write在没有等待回调而多次操作同一个文件是不安全的。在这种情况下,强烈推荐使用fs.createWriteStream方法。


2. fs.writeFile()将Buffer或字符串写入到文件

fs.writeFile(filename, data[, options], callback)

将一个buffer或字符串写入到指定的文件中,当文件已经存在时,文件内容将会被替换。

  • filename要写入的文件。

  • data要写入的文件的数据,可以是一个buffer或字符串。

  • options一个包含以下可选值的对象

    • encoding {String | Null} ,写入数据的编码方式,默认:'utf8'。如果写入数据是buffer时,这个参数会被忽略。
    • mode {Number} 默认:438 (aka 0666 in Octal)
    • flag {String} 默认:'w'

    当写入数据是字符串时,options参数可以是一个字符串,表示字符串编码方式,如:'utf8'

  • callback回调函数有1个参数 (err)err, 表示可能出现的错误。


3. fs.write()fs.writeFile()方法的比较

fs.readFile()方法和fs.read()方法的关系类似。fs.writeFile()也是对fs.write()方法的进一步封装,使用fs.readFile()方法省略了创建文件描述符的过程,可以更方便的向文件写入数据。

使用fs.writeFile()方法向./myFile.txt文件写入内容:

fs.writeFile('./myFile.txt', 'itbilu.com', function(err){ 
    if(err){
	console.log(err);
    }
})

使用fs.write()方法向文件写入内容时,首先要使用fs.open()创建文件描述符,最后再使用fs.write()方法向文件写入数据。

使用fs.writeFile()方法向./myFile.txt文件写入内容:

fs.open('./myFile.txt', 'w', function(err, fd){
    //创建写入内容缓冲区
    var writeBuffer = new Buffer('itbilu.com');
    fs.write(fd, writeBuffer, 0, writeBuffer.length, 0, function(err, written, buffer){
    	if(err){
    	    console.log(err);
    	}
    });
});