在本章中,我们将深入探讨 Node.js 中的文件系统模块,也称为 fs
模块。该模块提供了多种方法来操作文件和目录。我们将从基础开始,介绍如何使用 fs
模块进行基本的文件读写操作,然后逐步深入到更复杂的功能,如异步操作、流处理等。
文件系统的基本操作
读取文件
在 Node.js 中,你可以使用 fs.readFile()
方法来读取文件的内容。此方法需要两个参数:一个是要读取的文件路径,另一个是一个回调函数,用于处理读取的结果。回调函数接收两个参数:一个是错误对象(如果发生错误),另一个是文件内容。
const fs = require('fs'); fs.readFile('./example.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); });
写入文件
要向文件写入数据,可以使用 fs.writeFile()
方法。此方法同样接受两个主要参数:一个是要写入的文件路径,另一个是要写入的数据。此外,还可以指定编码选项。
const fs = require('fs'); fs.writeFile('./output.txt', 'Hello World!', (err) => { if (err) throw err; console.log('Data written to file'); });
追加内容到文件
如果你想将一些文本追加到现有文件的末尾,而不是覆盖它,可以使用 fs.appendFile()
方法。
const fs = require('fs'); fs.appendFile('./output.txt', '\nThis is an appended text.', (err) => { if (err) throw err; console.log('Appended to file'); });
删除文件
使用 fs.unlink()
方法可以删除一个文件。这个方法接受两个参数:一个是文件路径,另一个是一个回调函数,用于处理完成后的结果。
const fs = require('fs'); fs.unlink('./output.txt', (err) => { if (err) throw err; console.log('File deleted'); });
异步与同步操作
异步操作
大多数 fs
模块的方法都是异步的,这意味着它们不会阻塞其他操作的执行。这对于提高应用性能非常关键。
同步操作
如果你需要确保文件操作完成后才继续执行其他代码,可以使用同步版本的方法。这些方法以 sync
结尾,例如 fs.readFileSync()
。
const fs = require('fs'); try { const data = fs.readFileSync('./example.txt', 'utf8'); console.log(data); } catch (err) { console.error(err); }
使用流处理文件
对于大文件,逐行读取或写入可能更加高效。Node.js 提供了流(Stream)的概念来处理这类问题。
创建可读流
-- -------------------- ---- ------- ----- -- - -------------- ----- ---------- - --------------------------------------- - --------- ------ --- --------------------- ------- -- - --------------------- --------------- ----- -- -------- --- -------------------- -- -- - ----------------- ------------- --- ---------------------- ----- -- - ------------------- ---
创建可写流
-- -------------------- ---- ------- ----- -- - -------------- ----- ----------- - ------------------------------------------- ----------------------- -- - ----- ---- ---------- -------- ------------------ ------------------------ -- -- - -------------------- ------------ --- ----------------------- ----- -- - ------------------- ---
管道流
管道允许你把一个流的数据作为输入直接传递给另一个流,这使得处理大文件变得更加简单和高效。
const fs = require('fs'); const readStream = fs.createReadStream('./source.txt'); const writeStream = fs.createWriteStream('./destination.txt'); readStream.pipe(writeStream);
通过这些例子,你应该对 Node.js 中的文件系统操作有了更全面的理解。接下来,我们可以在实际项目中应用这些知识,创建更加高效和功能丰富的应用程序。