美文网首页
fs模块-fs.open和fs.write的使用案例

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

作者: 静昕妈妈芦培培 | 来源:发表于2021-02-20 13:37 被阅读0次

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

写入 bufferfd 指定的文件。 如果 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无效


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('写入成功')
    })
})

执行结果:


image.png

解析:


image.png

例2:如果要修改文件内容, fs.open设置flags为'r+',fs.write的参数position代表从文件原内容的第几个字节开始写入,新写入的内容会从那个位置开始替换


image.png
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('写入成功')
    })
})

执行结果:


image.png

解析:


image.png

例3: 如果要把新写入的内容追加到文件原内容后面, fs.open设置flags为'a',fs.write的参数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('咱们一起出发吧'), 6, 15,  (error, bytesWritten, buffer) => {
        if(error) {
            console.err(error)
            return
        }
        console.log('写入成功')
    })
})

执行结果:


image.png

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

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


image.png
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('写入成功')
    })
})

执行结果:


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, '咱们一起出发吧', 6, (error, written, string) => {
        if(error) {
            console.err(error)
            return
        }
        console.log('写入成功')
    })
})

执行结果:


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, '咱们一起出发吧', 6, (error, written, string) => {
        if(error) {
            console.err(error)
            return
        }
        console.log('写入成功')
    })
})

执行结果:


image.png

相关文章

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

    1.如下:a.text的内容是: 我最喜欢的课程是英语,修改为我最喜欢的课程是数学 index.js 执行结果为:...

  • Node.js 文件系统

    就是用文件系统模块(fs)来对文件的操作 打开文件 var fs = require("fs");fs.open(...

  • fs

    1.fs.open ,fs.write, fs.close 2. fs.writeFile 和fs.writeFi...

  • node.js文件操作

    打开文件fs.open(path, flags[, mode], callback) 读取文件内容异步的 fs.r...

  • fs模块-fs.read的使用案例

    fs.read(fd, buffer, offset, length, position, callback)##...

  • fs模块

    常见拷贝操作 这样有个问题,如果文件过大,就会占用极大内存。 fs.open、fs.read的用法 fs.writ...

  • 2019-06-22 fs模块

    一、同步实现 // 使用fs模块,创建一个目录fs// 使用fs模块,在目录中创建一个test.txt文件,往里面...

  • vue 打包时 TypeError [ERR_INVALID_C

    原因:node 版本问题,node v10 以上 fs.write 的callback 是必须的,降低Node版本...

  • Node进阶 ---- fs

    1. fs模块 在Node.js中,使用fs模块来实现所有有关文件及目录的创建、写入及删除操作。 在fs模块中,所...

  • TypeError [ERR_INVALID_CALLBACK]

    解决办法: node 版本问题,node v10 以上 fs.write 的callback 是必须的。如果不想重...

网友评论

      本文标题:fs模块-fs.open和fs.write的使用案例

      本文链接:https://www.haomeiwen.com/subject/erbtfltx.html