Skip to main content
本页介绍的 Bun.fileBun.write API 经过高度优化,是在 Bun 中处理文件的推荐方式。对于它们未涵盖的操作,例如 mkdirreaddir,请使用 Bun 对 node:fs 模块的近乎完整的实现

读取文件 (Bun.file())

Bun.file(path): BunFile 使用 Bun.file(path) 函数创建一个 BunFile 实例。BunFile 表示一个延迟加载的文件;初始化它不会从磁盘读取文件。
该引用遵循 Blob 接口,因此内容可以以多种格式读取。
你也可以从数字形式的文件描述符file:// URL 创建文件引用。
BunFile 可以指向磁盘上不存在文件的位置。
默认 MIME 类型为 text/plain;charset=utf-8。通过向 Bun.file 传入第二个参数可以覆盖该类型。
为了方便,Bun 将 stdinstdoutstderr 作为 BunFile 实例暴露。

删除文件 (file.delete())

调用 .delete() 删除文件。

写入文件 (Bun.write())

Bun.write(destination, data): Promise<number> Bun.write 是一个多功能工具,用于将各种类型的负载写入磁盘。 第一个参数是 destination,可以是以下任意类型:
  • string:文件系统上的路径。使用 "path" 模块进行路径操作。
  • URLfile:// 描述符。
  • BunFile:文件引用。
第二个参数是要写入的数据,可以是以下任意类型:
  • string
  • Blob(包括 BunFile
  • ArrayBufferSharedArrayBuffer
  • TypedArray(如 Uint8Array 等)
  • Response
Bun 会针对每种组合,使用当前平台上可用的最快系统调用。
将字符串写入磁盘:
将文件复制到磁盘上另一个位置:
将字节数组写入磁盘:
将文件内容写入 stdout
将 HTTP 响应的正文写入磁盘:

使用 FileSink 进行增量写入

Bun 提供了一个原生的增量写入文件 API,叫做 FileSink。从 BunFile 获取 FileSink 实例:
增量写入文件时,调用 .write()
这些数据块会在内部进行缓冲。要将缓冲区刷新到磁盘,请使用 .flush()。该方法会返回已刷新的字节数。
FileSink 达到其_高水位标记_时,缓冲区也会自动刷新;也就是说,当其内部缓冲区已满时会自动刷新。你可以配置此值。
刷新缓存并关闭文件:
默认情况下,bun 进程会一直保持运行,直到使用 .end() 显式关闭此 FileSink。如果不想使用此行为,可以对实例调用 "unref"

目录操作

Bun 对 node:fs 的实现速度很快。在 Bun 中使用 node:fs 处理目录。

读取目录(readdir)

在 Bun 中,使用 node:fs 模块的 readdir 读取目录。

递归读取目录

使用 readdir 并开启 recursive: true 递归读取目录。

创建目录(mkdir)

递归创建目录需使用 node:fsmkdir

性能基准

以下是 Linux 下 cat 命令的三行实现。
cat.ts
运行该文件:
terminal
在 Linux 上处理大文件时,速度是 GNU cat 的 2 倍。
猫截图

参考