Node.js 文件系统操作:创建、读取与写入文件(fs 模块详解)

Node FS 代表 NodeJS 文件系统模块。在我之前的帖子中,我们已经讨论了如何使用 require() 调用导入 Node.js 模块。在阅读本文之前,请阅读这篇帖子“Node.js 导出和导入模块”以了解 require() 调用的用法。

Node.js 文件系统 (FS) 模块详解

在这篇文章中,我们将深入探讨 Node.js 平台的“fs”模块。FS 代表文件系统。这个模块也被称为 I/O、文件系统或流模块。

Node.js 的 FS 模块是一个内置模块,用于处理文件和目录。它提供了许多功能,包括读取、写入、复制、删除和移动文件等。使用 FS 模块,我们可以轻松地进行文件操作,例如创建新文件、打开现有文件以及查看和修改文件的内容。此外,FS 模块还提供了异步和同步的操作方法,可以根据需要选择适合的方式来处理文件。

Node.js FS 模块简介

Node.js FS 模块提供与文件系统进行交互的 API,可以执行一些 I/O 操作,例如创建文件、读取文件、删除文件、更新文件等。与一些 Node.js 模块(如“npm”、“http”等)类似,Node.js 的“fs”模块也是 Node.js 平台的基本组成部分。我们无需进行任何设置即可使用 Node.js FS 模块。

Node.js 文件系统模块导入

我们只需要将 Node.js FS 模块导入到我们的代码中,并开始编写 I/O 操作的代码。要导入一个 Node.js FS 模块,示例如下:

var fs = require("fs");

这个 require() 调用将 Node.js 的“fs”模块导入缓存并创建一个类型为 Node.js FS 的对象。一旦完成,我们就可以使用 Node.js FS 对象执行任何 I/O 操作。假设我们的 ${Eclipse_Workspace} 指的是 D:\RamWorkspaces\NodeWorkSpace。从现在开始,我将使用这个变量来引用我的 Eclipse 工作空间。作为 Java、.NET 或 C/C++ 开发人员,我们已经学习并编写了一些 I/O 程序。I/O 或流有两种类型:

  • 写入流 (Write Stream) – 用于向流中写入数据。
  • 读取流 (Read Stream) – 用于从流中读取数据。

使用 Node.js 创建文件

现在我们将讨论如何使用 Node.js FS API 创建一个新文件。

  1. 在 Eclipse IDE 中创建一个 Node.js 项目。

从前面的示例中复制 package.json 文件并更新所需内容。

{
  "name": "filesystem",
  "version": "1.0.0",
  "description": "文件系统示例",
  "main": "filesystem",
  "author": "User 01",
  "engines": {
    "node": "*"
  }
}

创建一个包含以下内容的 JavaScript 文件:fs-create-file.js

/**
 * Node.js FS 示例
 * Node.js 创建文件
 */
var fs = require("fs");

var createStream = fs.createWriteStream("User 01.txt");
createStream.end();

代码说明:

  • var fs = require("fs")require() 调用将指定的 Node.js FS 模块加载到缓存中并将其分配给名为 fs 的对象。
  • fs.createWriteStream(filename):此调用用于创建具有给定文件名的写入流和文件。
  • createStream.end():此调用结束或关闭已打开的流。

在执行 fs-create-file.js 之前,首先观察文件系统项目的内容,您会注意到“User 01.txt”文件不可用。

${Eclipse_Workspace}/filesystem 下打开命令提示符,并运行 node 命令来执行 fs-create-file.js 文件,如下图所示。现在注意您的项目目录内容,您将注意到一个名为“User 01.txt”的空文件。

用 Node.js 写入文件

我们将使用 Node.js FS API 来创建一个新文件并将一些数据写入其中。这是我们先前示例的延续。

  1. ${Eclipse_Workspace}/filesystem 文件夹中删除之前创建的“User 01.txt”文件。

创建一个名为 fs-write-file.js 的 JavaScript 文件,内容如下:

/**
 * Node.js FS 示例
 * Node.js 写入文件
 */
var fs = require("fs");

var writeStream = fs.createWriteStream("User 01.txt");
writeStream.write("嗨,User 01用户。\n");
writeStream.write("谢谢。");
writeStream.end();

使用 createStream.write(sometext) 方法将一些文本写入文件。

${Eclipse_Workspace}/filesystem 文件夹中打开命令提示符,并运行 node 命令来执行 fs-write-file.js 文件,如下所示。

转到 ${Eclipse_Workspace}/filesystem 文件夹并打开“User 01.txt”文件以验证其内容。现在我们已经创建了一个新文件并向其中写入了一些数据。

使用 Node.js 读取文件

我们将使用 Node.js FS API 打开和读取现有文件的内容,并将该内容写入控制台。这是我们之前示例的延续。在这里,我们将使用命名的 JavaScript 函数。请通过这个示例来理解。

用以下内容创建一个 JavaScript 文件: fs-read-file1.js

/**
 * Node.js FS 读取文件
 * Node.js 读取文件
 */

var fs = require("fs");
function readData(err, data) {
  console.log(data);
}

fs.readFile('User 01.txt', 'utf8', readData);

代码说明:

readData() 是一个 JavaScript 函数,它有两个参数:

  • err: 是一个错误对象。当我们的程序无法打开或读取文件中的数据时,FS 模块会将一些错误消息写入此参数。
  • data: 是一个变量,用于存储读取到的数据。

此函数接受 data 参数,并将该数据打印到控制台。

fs.readFile() 是 Node.js FS API。它接受三个参数:

  1. 文件名
  2. 要读取的文件数据格式
  3. JavaScript 函数或 JavaScript 匿名函数

readFile() 从给定格式(第二个参数)的文件名(第一个参数)中读取数据,并使用第三个参数中给出的函数执行一些操作。在这个例子中,我们使用一个普通的 JavaScript 函数作为第三个参数。我们将在下一个例子中看到如何使用 JavaScript 匿名函数。在我们的例子中,readFile() 从“User 01.txt”文件中读取数据,并将其写入控制台。如果我们不使用 'utf8' 格式,那么我们将得到二进制数据。我们将在几分钟内验证这一点。

${Eclipse_Workspace}/filesystem 处打开命令提示符,并运行 node 命令以执行 fs-read-file1.js 文件。现在我们已经观察到我们的代码已成功打开文件,读取其内容并将其内容写入控制台。

Node.js 以二进制格式读取文件

现在我们将使用 JavaScript 匿名函数从文件中读取数据。通过这个示例来理解。它与之前的 fs-read-file1.js 示例类似,只是使用了匿名函数。如果你对 JavaScript 匿名函数不熟悉,请参考一些 JavaScript 教程并了解一些基本概念。创建一个包含以下内容的 JavaScript 文件:fs-read-file2.js

/**
 * Node.js FS 文件系统模块
 * Node.js 读取文件示例
 */
var fs = require("fs");

fs.readFile('User 01.txt', 'utf8', function(err, data) {
  console.log(data);
});

代码说明:这里的 readFile() 函数使用 JavaScript 匿名函数从文件中读取数据,并将文件内容写入控制台。当我们运行这个文件时,我们将得到与 fs-read-file1.js 示例相同的输出。现在移除 'utf8' 数据格式以查看二进制输出。

/**
 * Node.js 文件系统模块
 * Node.js 读取文件二进制数据示例
 */
var fs = require("fs");

fs.readFile('User 01.txt', function(err, data) {
  console.log(data);
});
Node.js 以二进制数据读取文件
[anyFSAPIObject] + 按 . (点) + 点后按 (CTRL + 空格键)
Node.js FS 模块 Enide IDE
bannerAds