美文网首页
fs.createWriteStream创建可写流

fs.createWriteStream创建可写流

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

    fs.createWriteStream(path[, options])#

    options 还可以包括 start 选项,用于写入数据到文件开头之后的某个位置,允许的值在 [0, Number.MAX_SAFE_INTEGER] 的范围内。
    若要修改文件而不是覆盖文件,则需要 flags 选项被设置为 r+ 而不是默认的 w
    encoding 可以是能被 Buffer 接受的任何一种字符编码。

    如果 autoClose 被设置为 true(默认的行为),则当 'error''finish' 事件时,文件描述符会被自动地关闭。 如果 autoClose 为 false,则即使发生错误,文件描述符也不会被关闭。 应用程序需要负责关闭它并确保没有文件描述符泄漏。

    默认情况下,流被销毁之后不会触发 'close' 事件。 这与其他 Writable 流的默认设置是相反的。 设置 emitClose 选项为 true 可以更改此行为。

    ReadStream 一样,如果指定了 fd,则 WriteStream 会忽略 path 参数,并且会使用指定的文件描述符。 这意味着不会触发 'open' 事件。 fd 必须是阻塞的,非阻塞的 fd 应该传给 net.Socket

    如果 options 是字符串,则它指定字符编码。

    例1:创建fs.WriteStream类的对象的时候,如果不传第二个参数,则默认options.flags为w,创建的可写流调用write方法写入数据的时候,会直接覆盖文件原所有的内容,
    options.flags为'w',再设置start无效,因为没有意义,不管怎样写入的时候都会覆盖掉文件原内容

    image.png
    const fs = require('fs')
    
    //创建可写流 fs.WriteStream 类的对象,继承自 <stream.Writable>
    const writer = fs.createWriteStream('./a.txt', {
        //默认值为w, 通过调用writer.write方法写入数据的时候,会直接覆盖文件所有的内容,
        // 即会把文件之前的内容全部再删除,写入新的数据
        flags: 'w'
    })
    
    
    //写入数据到流
    writer.write('aaa')
    

    执行结果:


    image.png

    例2:如果要修改文件内容,而不是覆盖文件原内容,把options.flags设置为'r+',然后通过options.start设置从文件内容的哪个字节开始修改


    image.png
    const fs = require('fs')
    
    const writer = fs.createWriteStream('./a.txt', {
        flags: 'r+', //如果要修改文件内容,而不是覆盖文件原有的所有内容,则设置flags为'r+'
        start: 24, //从文件内容的第24个字节开始修改
    })
    
    //写入数据到流
    writer.write('适合去郊游,', 'utf8')
    //再次向文件写入数据,会从当前位置开始写入
    writer.write('咱们出发把!', 'utf8')
    
    //关闭写入流,表明已没有数据要被写入可写流
    writer.end()
    
    

    执行结果:


    image.png

    例3:如果要把内容追加到文件原有的内容的后面,则设置flags为'a',此时设置start无效


    image.png
    const fs = require('fs')
    
    const writer = fs.createWriteStream('./a.txt', {
        flags: 'a', //如果要把内容追加到文件原有的内容的后面,则设置flags为'a',此时设置start无效
    })
    
    //写入数据到流
    writer.write(',适合去郊游,', 'utf8')
    //再次向文件写入数据,会从当前位置开始写入
    writer.write('咱们出发把!', 'utf8')
    
    //关闭写入流,表明已没有数据要被写入可写流
    writer.end()
    
    writer.on('open', () => {
        console.log('文件已被打开', writer.pending)
    })
    writer.on('ready', () => {
        console.log('文件已为写入准备好', writer.pending)
    })
    writer.on('close', () => {
        console.log('文件已被关闭')
        console.log("总共写入了%d个字节", writer.bytesWritten)
        console.log('写入的文件路径是'+ writer.path)
    })
    
    
    

    执行结果:


    image.png
    image.png

    相关文章

      网友评论

          本文标题:fs.createWriteStream创建可写流

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