fs 模块详解
fs 模块详解
TimmyNode.js 是一款基于 JavaScript 的服务端开发框架,其中内置的
fs文件系统模块为开发者提供了强大的文件处理能力。本文将详细介绍 Node.js 的fs模块,帮助你更好地理解文件操作的各种方式和方法,掌握如何使用该模块处理文件和目录。
fs 模块概述
模块介绍
fs(File System)模块是 Node.js 内置的核心模块之一,提供了文件读写、目录管理等一系列与文件系统相关的 API。通过 fs 模块,开发者可以在不引入外部依赖的情况下,进行文件操作、流操作等。
该模块包含的 API 主要分为同步和异步两类,异步 API 更加适合大规模 I/O 密集型操作,因为它不会阻塞主线程,而同步 API 更适合处理简单的文件操作或需要按顺序执行的操作。
fs 模块的加载
在使用 fs 模块之前,首先需要通过 require 关键字将其引入:
1 | const fs = require('fs'); |
此操作后,你便可以使用 fs 提供的所有功能。
文件操作
读取文件
文件读取是 fs 模块的常见功能之一,开发者可以使用 fs.readFile 和 fs.readFileSync 来读取文件。
- 异步读取文件
异步读取文件的优势在于不会阻塞主线程,可以提升 I/O 性能:
1 | fs.readFile('example.txt', 'utf8', (err, data) => { |
其中,example.txt 是要读取的文件名,utf8 表示文件的编码格式。回调函数的 err 参数用于捕获错误,data 则是读取到的文件内容。
- 同步读取文件
同步方式会在读取文件时阻塞程序的执行,适合用在简单的脚本或不需要并发处理的场景:
1 | try { |
写入文件
fs 提供了多种方式来写入文件,包括异步的 fs.writeFile 和同步的 fs.writeFileSync。
- 异步写入文件
1 | fs.writeFile('example.txt', 'Hello World!', (err) => { |
- 同步写入文件
1 | try { |
追加文件内容
如果需要在文件的现有内容后追加新内容,可以使用 fs.appendFile 或 fs.appendFileSync:
1 | fs.appendFile('example.txt', ' 追加内容', (err) => { |
删除文件
文件删除也是常见的文件操作之一。fs.unlink 和 fs.unlinkSync 可用于删除文件:
- 异步删除文件
1 | fs.unlink('example.txt', (err) => { |
- 同步删除文件
1 | try { |
目录操作
除了文件操作,fs 模块也提供了丰富的目录操作方法,包括创建、读取、删除目录等。
创建目录
- 异步创建目录
使用 fs.mkdir 可以异步创建新目录:
1 | fs.mkdir('newDir', { recursive: true }, (err) => { |
其中,recursive: true 选项确保如果父目录不存在,也会一并创建。
- 同步创建目录
1 | try { |
读取目录内容
fs.readdir 和 fs.readdirSync 用于读取目录中的文件和子目录:
1 | fs.readdir('newDir', (err, files) => { |
删除目录
- 异步删除目录
通过 fs.rmdir 可以删除空目录,但如果要删除非空目录,需配合其他方法或使用 fs.rm:
1 | fs.rmdir('newDir', (err) => { |
- 同步删除目录
1 | try { |
文件状态与权限操作
fs 模块还提供了检查文件状态、修改权限的 API,常用于文件系统的更深入操作。
检查文件状态
通过 fs.stat 可以检查文件或目录的状态信息,包括文件大小、创建时间等:
1 | fs.stat('example.txt', (err, stats) => { |
修改文件权限
fs.chmod 和 fs.chown 可用于修改文件或目录的权限和所有者:
1 | fs.chmod('example.txt', 0o755, (err) => { |
文件流操作
Node.js 的 fs 模块还支持流操作,适合处理大文件或者需要分批次处理数据的场景。
读取文件流
使用 fs.createReadStream 可以读取大文件,而不会一次性将文件内容全部加载到内存中:
1 | const readStream = fs.createReadStream('example.txt', 'utf8'); |
写入文件流
通过 fs.createWriteStream 可以将数据流写入到文件中:
1 | const writeStream = fs.createWriteStream('example.txt'); |
总结
Node.js 的 fs 模块为开发者提供了全面且灵活的文件系统操作能力,涵盖了从文件读写、目录管理到权限操作和流操作等各个方面。通过合理使用 fs 模块,开发者能够高效地管理文件和目录,处理各种复杂的 I/O 操作。

