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
函數(shù)屬性口四。
offset
決定 buffer 中要被寫入的部位攻礼, length
是整數(shù)宗弯,指定要寫入的字節(jié)數(shù)泉蝌。
position
指定文件開頭的偏移量(數(shù)據(jù)要被寫入的位置)铲咨。 如果 typeof position !== 'number'
洛姑,則數(shù)據(jù)會被寫入當前的位置汹胃。
回調有三個參數(shù) (err, bytesWritten, buffer)
婶芭,其中 bytesWritten
指定從 buffer
中被寫入的字節(jié)數(shù)。
不等待回調就對同一個文件多次使用 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('寫入成功')
})
})
執(zhí)行結果:
解析:
例2:如果要修改文件內容轨奄, fs.open設置flags為'r+',fs.write的參數(shù)position代表從文件原內容的第幾個字節(jié)開始寫入孟害,新寫入的內容會從那個位置開始替換
const fs = require('fs')
fs.open('./a.txt', 'r+', (err, fd) => {
if(err) {
console.err(err)
return
}
fs.write(fd, Buffer.from('咱們一起出發(fā)吧'), 6, 15, 21, (error, bytesWritten, buffer) => {
if(error) {
console.err(error)
return
}
console.log('寫入成功')
})
})
執(zhí)行結果:
解析:
例3: 如果要把新寫入的內容追加到文件原內容后面, fs.open設置flags為'a',fs.write的參數(shù)position無效挪拟,因為不管怎樣挨务,新內容都會追加到老內容后面
const fs = require('fs')
fs.open('./a.txt', 'a', (err, fd) => {
if(err) {
console.err(err)
return
}
fs.write(fd, Buffer.from('咱們一起出發(fā)吧'), 6, 15, (error, bytesWritten, buffer) => {
if(error) {
console.err(error)
return
}
console.log('寫入成功')
})
})
執(zhí)行結果:
fs.write(fd, string[, position[, encoding]], callback)
#
-
fd
<integer> -
string
<string> | <Object> -
position
<integer> -
encoding
<string> 默認值:'utf8'
。 -
callback
<Function>
將 string
寫入到 fd
指定的文件玉组。 如果 string
不是字符串或具有自有 toString
函數(shù)屬性的對象谎柄,則拋出異常。
position
指定文件開頭的偏移量(數(shù)據(jù)要被寫入的位置)惯雳。 如果 typeof position !== 'number'
朝巫,則數(shù)據(jù)會被寫入當前的位置。 參見 pwrite(2)
石景。
encoding
是期望的字符串編碼劈猿。
回調會接收到參數(shù) (err, written, string)
,其中 written
指定傳入的字符串中被要求寫入的字節(jié)數(shù)鸵钝。 被寫入的字節(jié)數(shù)不一定與被寫入的字符串字符數(shù)相同糙臼。 參見 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, '咱們一起出發(fā)吧', 6, (error, written, string) => {
if(error) {
console.err(error)
return
}
console.log('寫入成功')
})
})
執(zhí)行結果:
例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, '咱們一起出發(fā)吧', 6, (error, written, string) => {
if(error) {
console.err(error)
return
}
console.log('寫入成功')
})
})
執(zhí)行結果:
例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, '咱們一起出發(fā)吧', 6, (error, written, string) => {
if(error) {
console.err(error)
return
}
console.log('寫入成功')
})
})
執(zhí)行結果: