在前端开发中,我们经常需要操作文件,例如读取、写入、删除等等。Node.js 提供了内置的 fs
模块让我们可以轻松地完成这些操作。然而,这个模块的 API 是基于回调函数的,使用起来略显麻烦。幸运的是,Node.js 10.0 版本之后引入的 fs.promises
模块提供了使用 Promise 的 API,使文件操作更加方便和可读性更好。
在本文中,我们将学习如何使用 fs.promises
进行文件操作,并给出一些使用示例来让你更好地理解该模块的使用方式。
安装和引入
Node.js 的内置模块 fs
基于回调函数编写,并不支持 Promise。为了使用 fs.promises
,我们需要遵循以下步骤:
- 安装 Node.js 10 及以上版本
- 在项目目录中运行
npm init
命令初始化项目 - 运行
npm install fs-extra
命令安装fs
和fs.promises
两个模块 - 在代码中通过
import { promises as fs } from 'fs'
或const { promises: fs } = require('fs')
引入fs.promises
模块
以下是通过 import
语法引入 fs.promises
的示例代码:
import { promises as fs } from 'fs'; // 然后就可以在其他地方使用 fs 的 Promise API 了 fs.readFile('file.txt', 'utf8') .then((data) => console.log(data)) .catch((err) => console.error(err));
文件读取
fs.promises
提供了与 fs
模块相同的文件读取方法。使用 Promise API,我们可以像下面这样读取一个文件:
fs.readFile('file.txt', 'utf8') .then((data) => console.log(data)) .catch((err) => console.error(err));
在读取文件内容后,结果将作为 Promise 的值返回。如果操作失败,则返回的 Promise 将被拒绝,并且错误信息将被传递给 catch
函数。
除了 readFile
,还有其他读取文件的方法:
readFileSync
:同步读取一个文件readdir
:读取目录中的文件列表readdirSync
:同步读取目录中的文件列表
文件写入
同样,fs.promises
也提供了与 fs
模块相同的文件写入方法。使用 Promise API 编写的代码可以像下面这样写入文件:
fs.writeFile('file.txt', 'Hello, world!', 'utf8') .then(() => console.log('File has been saved.')) .catch((err) => console.error(err));
在写入文件之后,Promise 的值将被解析为 undefined
。如果写入操作失败,则 Promise 将被拒绝,并且错误信息将被传递给 catch
函数。
除了 writeFile
,还有其他写入文件的方法:
writeFileSync
:同步写入一个文件appendFile
:在一个文件末尾追加数据appendFileSync
:同步在一个文件末尾追加数据mkdir
:创建一个目录mkdirSync
:同步创建一个目录
文件操作
除了读取和写入文件之外,fs.promises
还提供了其他文件操作的方法。例如,我们可以使用 unlink
删除一个文件,使用 stat
获取文件属性,使用 rename
重命名文件等。
以下是一些示例代码:
-- -------------------- ---- ------- -- ---- --------------------- -------- -- ----------------- --- ---- ----------- ------------ -- -------------------- -- ------ ------------------- ------------- -- ------------------- ------------ -- -------------------- -- ----- --------------------- --------------- -------- -- ----------------- --- ---- ----------- ------------ -- --------------------
同样,如果操作失败,则返回的 Promise 将被拒绝,并且错误信息将被传递给 catch
函数。
结论
通过本文,我们已经了解了如何使用 fs.promises
进行文件操作,并给出了一些使用示例来帮助理解该模块的使用方式。fs.promises
的使用不仅可以使代码更加优雅,而且还可以显著减少编写异步代码所需的时间。尝试在你的下一个项目中尝试使用它吧!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/88009