fs模塊-fs.open和fs.write的使用案例

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

寫入 bufferfd 指定的文件千扔。 如果 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無效


image.png
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í)行結果:


image.png

解析:


image.png

例2:如果要修改文件內容轨奄, fs.open設置flags為'r+',fs.write的參數(shù)position代表從文件原內容的第幾個字節(jié)開始寫入孟害,新寫入的內容會從那個位置開始替換


image.png
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í)行結果:


image.png

解析:


image.png

例3: 如果要把新寫入的內容追加到文件原內容后面, fs.open設置flags為'a',fs.write的參數(shù)position無效挪拟,因為不管怎樣挨务,新內容都會追加到老內容后面


image.png
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í)行結果:


image.png

fs.write(fd, string[, position[, encoding]], callback)#

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',


image.png
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í)行結果:


image.png

例2:如果要用寫入的字符串覆蓋文件原有的所有內容揽乱,fs.open設置flags為'w',


image.png
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í)行結果:


image.png

例3:如果要用寫入的字符串修改文件原有的內容名眉,fs.open設置flags為'r+',但是只能從文件原內容開頭用新字符依次替換老字符,不能指定開始修改的位置


image.png
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í)行結果:


image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末凰棉,一起剝皮案震驚了整個濱河市损拢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撒犀,老刑警劉巖福压,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異或舞,居然都是意外死亡荆姆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門映凳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胆筒,“玉大人,你說我怎么就攤上這事诈豌∑途龋” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵矫渔,是天一觀的道長彤蔽。 經(jīng)常有香客問我,道長蚌斩,這世上最難降的妖魔是什么铆惑? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮送膳,結果婚禮上员魏,老公的妹妹穿的比我還像新娘。我一直安慰自己叠聋,他們只是感情好撕阎,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碌补,像睡著了一般虏束。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厦章,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天镇匀,我揣著相機與錄音,去河邊找鬼袜啃。 笑死汗侵,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播晰韵,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼发乔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雪猪?” 一聲冷哼從身側響起栏尚,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎只恨,沒想到半個月后译仗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡官觅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年古劲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缰猴。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疤剑,靈堂內的尸體忽然破棺而出滑绒,到底是詐尸還是另有隱情,我是刑警寧澤隘膘,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布疑故,位于F島的核電站,受9級特大地震影響弯菊,放射性物質發(fā)生泄漏纵势。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一管钳、第九天 我趴在偏房一處隱蔽的房頂上張望钦铁。 院中可真熱鬧,春花似錦才漆、人聲如沸牛曹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黎比。三九已至,卻和暖如春鸳玩,著一層夾襖步出監(jiān)牢的瞬間阅虫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工不跟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颓帝,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像躲履,于是被迫代替她去往敵國和親见间。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內容