企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
>[success] # Writable -- 可写流 1. Node的`Writable`是可写流的抽象类,用于将数据写入一个目标文件或者网络连接等输出源 2. 常见提供api | 方法名 | 描述 | | --- | --- | | write(chunk, \[encoding\], \[callback\]) | 向可写流中写入数据块,chunk为要写入的数据,encoding为数据的编码方式,callback为写入操作的回调函数。 | | end(\[chunk\], \[encoding\], \[callback\]) | 写入数据并结束可写流的操作,可以传递数据块和编码方式。当写入操作完成后,会自动触发“finish”事件,callback函数会在此时执行。 | | cork() | 在写入数据时启动缓存机制,可以提高写入效率。 | | uncork() | 在缓存数据写入操作之前,手动刷新缓存并立即写入数据。 | | setDefaultEncoding(encoding) | 设置默认的编码方式。 | | destroy() | 中断可写流的操作,并触发“close”事件。 | | on(event, listener) | 绑定事件监听器,如“close”、“error”、“finish”等事件。 | | once(event, listener) | 一次性绑定事件监听器,在事件触发后自动解绑。 | >[info] ## fs.createWriteStream(path\[, options\]) | 参数 | 类型 | 描述 | 默认值 | | --- | --- | --- | --- | | path | string \| Buffer \| URL | 文件路径或buffer或URL | 无 | | options | string \| Object | 可选参数,可以是字符串或对象,定义写入的选项 | { flags: 'w', encoding: 'utf8', fd: null, mode: 0o666, autoClose: true, emitClose: true, start: undefined, fs: null } | | options.flags | string | 文件系统标志 | 'w' | | options.encoding | string | 字符编码 | 'utf8' | | options.fd | integer \| FileHandle | 文件描述符,在打开文件的情况下使用 | null | | options.mode | integer | 设置文件的权限,类似于chmod(2) | 0o666 | | options.autoClose | boolean | 是否自动关闭文件流 | true | | options.emitClose | boolean | 是否在关闭文件流时发出 'close' 事件 | true | | options.start | integer | 写入文件的起始位置 | undefined | | options.fs | Object \| null | 可自定义使用的 fs 模块实现 | null | * 返回值可以使用的方法 `createWriteStream()`方法返回的是一个可写流对象,该对象具有以下常用方法: * **write(chunk, \[encoding\], \[callback\])**: 写入数据到文件中,返回值为`Boolean`。 第一个参数chunk为写入的数据,可以是字符串或者二进制数据; 第二个参数encoding为指定字符编码格式。可选参数,如果省略则使用默认编码格式“UTF-8”; 第三个参数callback是写入操作完成后的回调函数,可选参数。如果写入操作失败则回调函数的第一个参数为Error对象,否则为null。 * **end(\[chunk\], \[encoding\], \[callback\])**:结束写入操作,返回值为`void`。第一个参数chunk为写入的数据,可以是字符串或者二进制数据; 第二个参数encoding为指定字符编码格式。可选参数,如果省略则使用默认编码格式“UTF-8”; 第三个参数callback是写入操作完成后的回调函数。 * **on(event, listener)**:监听可写流事件,返回值为`void`。event为事件名称,listener为事件处理函数。 | 方法 | 简介 | | --- | --- | | `.write()` | 向可写流中写入数据 | | `.end()` | 结束写入操作 | | `.on()` | 绑定事件处理函数 | | `.emit()` | 触发指定的事件 | | `.addListener()` | 添加事件监听器 | | `event: 'close'` | 当写入流被关闭时触发 | | `event: 'drain'` | 当底层的缓冲区变空时触发 | | `event: 'error'` | 当流发生错误时触发 | | `event: 'finish'` | 当流结束写入操作时触发 | >[danger] ##### 案例 ~~~ const fs = require('fs') const writeStream = fs.createWriteStream('./a.txt', { flags: 'w', start: 10 }) // 写入内容 writeStream.write('aaaa') writeStream.write('bbbb') writeStream.write('我是水') // 写入完成后关闭 writeStream.on('close', () => { console.log('全部写入完毕') }) //绑定事件监听 writeStream.on('drain', () => { console.log('缓冲区已经被消耗,可以继续写入。') }) writeStream.on('finish', () => { console.log('文件写入完成!') }) writeStream.on('error', (err) => { console.log(`写入文件发生错误:${err.message}`) }) // 写入后要告诉 系统写入完了可以关闭 // writeStream.end('最后写入内容'); // writeStream.close() 强制关闭 writeStream.end() ~~~ 打印结果: ~~~ 文件写入完成! 全部写入完毕 ~~~ >[danger] ##### 注意如果你使用windows * 如果你使用windows 运行系统问题导致,当你使用start 参数指定追加位置,要注意要使用'r+',不要使用'a+'