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 创建一个新文件。
- 在 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 来创建一个新文件并将一些数据写入其中。这是我们先前示例的延续。
- 从
${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。它接受三个参数:
- 文件名
- 要读取的文件数据格式
- 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);
});

[anyFSAPIObject] + 按 . (点) + 点后按 (CTRL + 空格键)
