0055. fs 文件系统模块概述
1. 📒 概述
fs
模块fs
是 file system 的简写,表示文件系统。fs
模块是 Node.js 中内置的一个文件系统模块,使用它可以对本地的文件及目录(文件夹)进行操作。- 主要功能包括文件的读取与写入、目录操作、文件状态获取等。
- 熟悉
fs
模块的方法和选项,能够高效地进行文件和目录操作。
- 异步与同步操作
fs
模块提供了同步和异步两种操作方式:- 同步操作:直接执行,阻塞主线程,直到操作完成。
- 异步操作:通过回调函数或
Promise
处理结果,不会阻塞主线程。
- 同步方法
- 方法名后加
Sync
- 所有异步方法都有对应的同步版本,阻塞主线程直到操作完成。
- 方法名后加
- 推荐异步
- 推荐优先使用异步操作,以避免阻塞主线程,提高程序性能。
- 适合处理 I/O 密集型任务。
2. 📒 fs
模块常用 API
功能分类 | 方法名称 | 描述 |
---|---|---|
文件检查 | fs.access() | 检查文件或目录的可访问性(是否存在、是否可读/可写)。 |
文件读取 | fs.readFile() | 异步读取文件内容。 |
fs.readFileSync() | 同步读取文件内容。 | |
文件写入 | fs.writeFile() | 异步写入文件内容(覆盖模式)。 |
fs.writeFileSync() | 同步写入文件内容(覆盖模式)。 | |
fs.appendFile() | 异步追加文件内容。 | |
fs.appendFileSync() | 同步追加文件内容。 | |
文件其他操作 | fs.copyFile() | 异步复制文件。 |
fs.rename() | 异步重命名文件或目录。 | |
fs.unlink() | 异步删除文件。 | |
目录操作 | fs.mkdir() | 异步创建目录。支持递归创建多级目录(recursive: true )。 |
fs.rmdir() | 异步删除空目录。 | |
fs.readdir() | 异步读取目录内容,返回目录中的文件和子目录名称列表。 | |
fs.stat() | 获取文件或目录的状态信息(如大小、修改时间等)。 | |
fs.realpath() | 获取文件或目录的绝对路径。 |
3. 📒 文件检查
- 使用
fs.access()
方法检查文件是否存在及其可读、可写属性。 - 参数
mode
可以指定访问权限,默认为fs.constants.F_OK
(仅检查文件是否存在)。 - 返回值是通过回调函数传递的错误对象,如果文件存在且符合权限,则返回
null
。
4. 📒 文件读取
- 同步读取文件:
- 使用
fs.readFileSync()
方法同步读取文件内容。
- 使用
- 异步读取文件:
- 使用
fs.readFile()
方法异步读取文件内容。
- 使用
5. 📒 文件写入
- 同步写入:使用
fs.writeFileSync()
方法。 - 异步写入:使用
fs.writeFile()
方法。 - 追加写入:使用
fs.appendFileSync()
或fs.appendFile()
方法。
6. 📒 文件其他操作
- 复制文件:
- 使用
fs.copyFile()
或fs.copyFileSync()
方法复制文件。
- 使用
- 重命名文件:
- 使用
fs.rename()
或fs.renameSync()
方法重命名文件或目录。
- 使用
7. 📒 目录操作
- 创建目录:
- 使用
fs.mkdir()
或fs.mkdirSync()
方法创建目录。 - 支持 递归创建多级目录,通过设置
recursive
选项为true
。
- 使用
- 删除目录:
- 使用
fs.rmdir()
或fs.rmdirSync()
方法删除空目录。 - 如果目录非空,需要先删除其内容。
- 使用
- 复制目录:
- 需要手动实现,因为
fs
模块不直接支持目录复制。 - 不过可以借助第三方库
fs-extra
或ncp
来实现。
- 需要手动实现,因为
- 重命名目录:
- 使用
fs.rename()
或fs.renameSync()
方法重命名目录。
- 使用
- 获取文件状态:
- 使用
fs.stat()
或fs.lstat()
方法获取文件或符号链接的状态信息。 - 返回一个
Stats
对象,包含文件的大小、修改时间、权限等信息。
- 使用
- 获取目录内容:
- 使用
fs.readdir()
或fs.readdirSync()
方法读取目录内容。 - 返回目录中的所有文件和子目录名称。
- 使用
- 获取绝对路径:
- 使用
fs.realpath()
或fs.realpathSync()
方法获取文件或目录的绝对路径。
- 使用