fs.readFile(path[, options], callback)
版本 | 变化 |
---|---|
v18.0.0 | 将无效回调传递给 |
v16.0.0 | 如果返回多个错误,则返回的错误可能是 |
v15.2.0、v14.17.0 | options 参数可能包含 AbortSignal 以中止正在进行的 readFile 请求。 |
v10.0.0 |
|
v7.6.0 |
|
v7.0.0 |
|
v5.1.0 | 如果成功, |
v5.0.0 |
|
v0.1.29 | 添加于:v0.1.29 |
参数
path
<string> | <Buffer> | <URL> | <integer> 文件名或文件说明符options
<Object>|<string>encoding
<string> | <null> 默认:null
flag
<string>参看支持文件系统flags
.默认:'r'
.signal
<AbortSignal> 允许中止 in-progress 读取文件
callback
<Function>err
<Error> | <AggregateError>data
<string> | <Buffer>
异步读取文件的全部内容。
import { readFile } from 'node:fs';
readFile('/etc/passwd', (err, data) => {
if (err) throw err;
console.log(data);
});
回调传递了两个参数 (err, data)
,其中 data
是文件的内容。
如果未指定编码,则返回原始缓冲区。
如果options
是字符串,则它指定编码:
import { readFile } from 'node:fs';
readFile('/etc/passwd', 'utf8', callback);
当路径是目录时,fs.readFile()
和
的行为是特定于平台的。在 macOS、Linux 和 Windows 上,将返回错误。在 FreeBSD 上,将返回目录内容的表示。fs.readFileSync()
import { readFile } from 'node:fs';
// macOS, Linux, and Windows
readFile('<directory>', (err, data) => {
// => [Error: EISDIR: illegal operation on a directory, read <directory>]
});
// FreeBSD
readFile('<directory>', (err, data) => {
// => null, <data>
});
可以使用 AbortSignal
中止正在进行的请求。如果请求被中止,则使用 AbortError
调用回调:
import { readFile } from 'node:fs';
const controller = new AbortController();
const signal = controller.signal;
readFile(fileInfo[0].name, { signal }, (err, buf) => {
// ...
});
// When you want to abort the request
controller.abort();
fs.readFile()
函数缓冲整个文件。为了最大限度地降低内存成本,如果可能,更喜欢通过 fs.createReadStream()
进行流式传输。
中止正在进行的请求不会中止单个操作系统请求,而是执行内部缓冲fs.readFile
。
文件说明符#
- 任何指定的文件说明符都必须支持读取。
- 如果文件说明符被指定为
path
,它不会自动关闭。 - 读数将从当前位置开始。例如,如果文件已经有
'Hello World
' 并且使用文件说明符读取了六个字节,则使用相同的文件说明符调用fs.readFile()
将给出'World'
,而不是'Hello World'
。
性能注意事项#
fs.readFile()
方法一次将一个文件的内容异步读取到内存中,允许事件循环在每个块之间切换。这允许读取操作对可能使用底层 libuv 线程池的其他活动的影响较小,但意味着将完整文件读入内存需要更长的时间。
额外的读取开销在不同的系统上可能会有很大差异,并且取决于正在读取的文件类型。如果文件类型不是常规文件(例如管道)并且 Node.js 无法确定实际文件大小,则每次读取操作将加载 64 KiB 个数据。对于常规文件,每次读取将处理 512 KiB 个数据。
对于需要as-fast-as-possible 读取文件内容的应用程序,最好直接使用fs.read()
并且应用程序代码管理读取文件本身的全部内容。
Node.js GitHub 问题#25741 提供了更多信息和关于fs.readFile()
在不同 Node.js 版本中针对多种文件大小的性能的详细分析。
相关用法
- Node.js fs.readFile()用法及代码示例
- Node.js fs.readFileSync()用法及代码示例
- Node.js fs.readFileSync(path[, options])用法及代码示例
- Node.js fs.read()用法及代码示例
- Node.js fs.readdir()用法及代码示例
- Node.js fs.readlinkSync()用法及代码示例
- Node.js fs.readdirSync()用法及代码示例
- Node.js fs.readlink()用法及代码示例
- Node.js fs.realpath()用法及代码示例
- Node.js fs.realpathSync()用法及代码示例
- Node.js fs.rename()用法及代码示例
- Node.js fs.renameSync()用法及代码示例
- Node.js fs.rename(oldPath, newPath, callback)用法及代码示例
- Node.js fs.rmdir()用法及代码示例
- Node.js fs.rm()用法及代码示例
- Node.js fs.rmdirSync()用法及代码示例
- Node.js fs.rmSync()用法及代码示例
- Node.js fs.filehandle.datasync()用法及代码示例
- Node.js fs.chmod()用法及代码示例
- Node.js fs.Dirent.isFile()用法及代码示例
- Node.js fs.Dir.closeSync()用法及代码示例
- Node.js fs.fchmodSync()用法及代码示例
- Node.js fs.symlink(target, path[, type], callback)用法及代码示例
- Node.js fs.constants用法及代码示例
- Node.js fs.mkdir()用法及代码示例
注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 fs.readFile(path[, options], callback)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。