fs.write(fd, buffer[, offset[, length[, position]]], callback)
#
-
fd
<integer> -
buffer
<Buffer> | <TypedArray> | <DataView> | <string> | <Object> -
offset
<integer> -
length
<integer> -
position
<integer> -
callback
<Function>-
err
<Error> -
bytesWritten
<integer> -
buffer
<Buffer> | <TypedArray> | <DataView>
-
写入 buffer
到 fd
指定的文件。 如果 buffer
是普通的对象,则它必须具有自身的 toString
函数属性。
offset
决定 buffer 中要被写入的部位, length
是整数,指定要写入的字节数。
position
指定文件开头的偏移量(数据要被写入的位置)。 如果 typeof position !== 'number'
,则数据会被写入当前的位置。
回调有三个参数 (err, bytesWritten, buffer)
,其中 bytesWritten
指定从 buffer
中被写入的字节数。
不等待回调就对同一个文件多次使用 fs.write()
是不安全的。 对于这种情况,建议使用 fs.createWriteStream()
。
例1: fs.open设置flags为w,打开文件写入的时候,新写入的内容会覆盖文件原有的所有内容,此时设置fs.write的position无效
const fs = require('fs')
//设置flags为w,打开文件写入的时候,新写入的内容会覆盖文件原有的所有内容
fs.open('./a.txt', 'w', (err, fd) => {
if(err) {
console.err(err)
return
}
fs.write(fd, Buffer.from('今天天气不错'), 6, 6, (error, bytesWritten, buffer) => {
if(error) {
console.err(error)
return
}
console.log('写入成功')
})
})
执行结果:
解析:
例2:如果要修改文件内容, fs.open设置flags为'r+',fs.write的参数position代表从文件原内容的第几个字节开始写入,新写入的内容会从那个位置开始替换
const fs = require('fs')
fs.open('./a.txt', 'r+', (err, fd) => {
if(err) {
console.err(err)
return
}
fs.write(fd, Buffer.from('咱们一起出发吧'), 6, 15, 21, (error, bytesWritten, buffer) => {
if(error) {
console.err(error)
return
}
console.log('写入成功')
})
})
执行结果:
解析:
例3: 如果要把新写入的内容追加到文件原内容后面, fs.open设置flags为'a',fs.write的参数position无效,因为不管怎样,新内容都会追加到老内容后面
const fs = require('fs')
fs.open('./a.txt', 'a', (err, fd) => {
if(err) {
console.err(err)
return
}
fs.write(fd, Buffer.from('咱们一起出发吧'), 6, 15, (error, bytesWritten, buffer) => {
if(error) {
console.err(error)
return
}
console.log('写入成功')
})
})
执行结果:
fs.write(fd, string[, position[, encoding]], callback)
#
-
fd
<integer> -
string
<string> | <Object> -
position
<integer> -
encoding
<string> 默认值:'utf8'
。 -
callback
<Function>
将 string
写入到 fd
指定的文件。 如果 string
不是字符串或具有自有 toString
函数属性的对象,则抛出异常。
position
指定文件开头的偏移量(数据要被写入的位置)。 如果 typeof position !== 'number'
,则数据会被写入当前的位置。 参见 pwrite(2)
。
encoding
是期望的字符串编码。
回调会接收到参数 (err, written, string)
,其中 written
指定传入的字符串中被要求写入的字节数。 被写入的字节数不一定与被写入的字符串字符数相同。 参见 Buffer.byteLength
。
不等待回调就对同一个文件多次使用 fs.write()
是不安全的。 对于这种情况,建议使用 fs.createWriteStream()
。
例1:如果要把写入的字符串都追加到文件原内容后面,fs.open设置flags为'a',
const fs = require('fs')
fs.open('./a.txt', 'a', (err, fd) => {
if(err) {
console.err(err)
return
}
fs.write(fd, '咱们一起出发吧', 6, (error, written, string) => {
if(error) {
console.err(error)
return
}
console.log('写入成功')
})
})
执行结果:
例2:如果要用写入的字符串覆盖文件原有的所有内容,fs.open设置flags为'w',
const fs = require('fs')
fs.open('./a.txt', 'w', (err, fd) => {
if(err) {
console.err(err)
return
}
fs.write(fd, '咱们一起出发吧', 6, (error, written, string) => {
if(error) {
console.err(error)
return
}
console.log('写入成功')
})
})
执行结果:
例3:如果要用写入的字符串修改文件原有的内容,fs.open设置flags为'r+',但是只能从文件原内容开头用新字符依次替换老字符,不能指定开始修改的位置
const fs = require('fs')
fs.open('./a.txt', 'r+', (err, fd) => {
if(err) {
console.err(err)
return
}
fs.write(fd, '咱们一起出发吧', 6, (error, written, string) => {
if(error) {
console.err(error)
return
}
console.log('写入成功')
})
})
执行结果: