FileSystemWritableFileStream:write() 方法

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在某些或所有支持的浏览器中。

注意:此功能在Web Workers中可用。

write() 方法是 FileSystemWritableFileStream 接口的方法,用于将内容写入调用该方法的文件,写入位置为当前文件光标偏移量。

在流关闭之前,不会将任何更改写入磁盘上的实际文件。更改通常会写入临时文件。此方法也可用于在流中查找字节点并进行截断,以修改文件包含的总字节数。

语法

js
write(data)

参数

data

可以是以下之一

  • 要写入的文件数据,可以是 ArrayBufferTypedArrayDataViewBlob 或字符串。
  • 包含以下属性的对象
    type

    一个字符串,值为 "write""seek""truncate" 之一。

    data

    要写入的文件数据。可以是 ArrayBufferTypedArrayDataViewBlob 或字符串。如果 type 设置为 "write",则此属性为必需属性。

    position

    如果使用 "seek" 类型,则当前文件光标应移动到的字节位置。如果 type"write",也可以设置此属性,在这种情况下,写入将从指定位置开始。

    size

    表示流应包含的字节数。如果 type 设置为 "truncate",则此属性为必需属性。

返回值

一个 Promise,返回 undefined

异常

NotAllowedError DOMException

如果 PermissionStatus.state 不是 granted,则抛出此异常。

QuotaExceededError DOMException

如果文件的新大小大于文件的原始大小,并且超过了浏览器的存储配额,则抛出此异常。

TypeError

如果 data 未定义,或者 positionsize 无效,则抛出此异常。

示例

以下异步函数打开“保存文件”选择器,选择文件后将返回 FileSystemFileHandle。然后,使用 FileSystemFileHandle.createWritable() 方法从此处创建可写流。

然后将文本字符串写入流,随后关闭流。

js
async function saveFile() {
  try {
    // create a new handle
    const newHandle = await window.showSaveFilePicker();

    // create a FileSystemWritableFileStream to write to
    const writableStream = await newHandle.createWritable();

    // write our file
    await writableStream.write("This is my file content");

    // close the file and write the contents to disk.
    await writableStream.close();
  } catch (err) {
    console.error(err.name, err.message);
  }
}

以下示例显示了可以传递到 write() 方法的不同选项。

js
// just pass in the data (no options)
writableStream.write(data);

// writes the data to the stream from the determined position
writableStream.write({ type: "write", position, data });

// updates the current file cursor offset to the position specified
writableStream.write({ type: "seek", position });

// resizes the file to be size bytes long
writableStream.write({ type: "truncate", size });

规范

规范
文件系统标准
# api-filesystemwritablefilestream-write

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅