昨天介绍了Node.js的文件系统模块fs
中两种读取文件的方法。不只读取文件,写入文件同样也有两种方法:fs.write()
和fs.writeFile()
。
1. fs.write()
将数据写入到文件
fs.write(fd, buffer, offset, length[, position], callback) fs.write(fd, data[, position[, encoding]], callback)
fs.write()
有上面两种形式,可以将一个buffer
或data
字符串写入到文件描述符fd
指定的文件中。
fs.write(fd, buffer, offset, length[, position], callback)
参数如下:
-
buffer
是一个缓冲区,是要写入到文件的数据。 -
offset
用于确认buffer
写入数据时的偏移量。 -
length
是一个整型值,指定写入数据的长度。通过
offset
和length
可以确定buffer
的哪个部分将会被写入文件。 -
position
是一个整型值,指写入文件的起始位置,如果position
为typeof position !== 'number'
,将会从文件当前的位置写入数据。 -
callback
中回调函数,其中包含了三个参数(err, written, buffer)
,分别表示:错误、写入文件的字节数、缓冲区。
fs.write(fd, data[, position[, encoding]], callback)
参数如下
-
data
要写入文件的字符串(当写入数据不是Buffer
时,将会被转为字符串)。 -
position
是一个整型值,指写入文件的起始位置,如果position
为typeof 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
(aka0666
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); } }); });