fs模块的同步和异步方法的区别
NodeJS 为我们提供了一个内置的fs(文件系统)模块 对于各种文件处理操作,如读取文件、写入文件、删除文件等。可以使用以下语句安装 fs 模块:
句法:
npm install fs --save
注意:上面命令中的 npm 代表节点包管理器,所有依赖项都可以从这里安装到 NodeJS 中。
要使用 fs 模块,请在代码中附加以下语句:
const fs = require('fs');
fs 模块具有不同的文件处理操作,例如读取文件、写入文件、追加文件、关闭文件、删除文件等。所有操作都可以根据用户要求以同步和异步方式执行。
1、同步方法:同步函数会阻塞程序的执行,直到执行文件操作。这些函数也称为阻塞函数。同步方法将文件描述符作为最后一个参数。文件描述符是对打开文件的引用。它是使用 fs 模块的 fs.open() 方法打开文件后返回的文件的数字或引用 id。所有异步方法都可以通过在函数名后面加上“Sync”来同步执行。 NodeJS中fs模块的一些同步方法有:
- fs.readFileSync()
- fs.renameSync()
- fs.writeSync()
- fs.writeFileSync()
- fs.fsyncSync()
- fs.appendFileSync()
- fs.statSync()
- fs.readdirSync()
- fs.existsSync()
示例 1:同步读取方法
第 1 步:让我们创建一个名为main.js的 JavaScript 文件和一个名为sample.txt的文本文件,其中包含以下语句:
GeeksForGeeks is a Computer Science portal.
第 2 步:在main.js文件中添加以下代码并执行它:
main.js
var fs = require("fs");
// Synchronous read
console.log("Synchronous read method:");
var data = fs.readFileSync('sample.txt');
console.log("Data in the file is - " + data.toString());
main.js
var fs = require("fs");
// Synchronous read
console.log("Synchronous append method:");
var data = "\nGeeksForGeeks is a Computer Science portal.";
// Append data to file
fs.appendFileSync('sample.txt', data, 'utf8');
console.log("Data is appended to file successfully.")
data = fs.readFileSync('sample.txt');
console.log("Data in the file after appending is - \n" + data.toString());
main.js
var fs = require("fs");
// Asynchronous read
console.log("Asynchronous read method:");
fs.readFile('sample.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("Data in the file is - " + data.toString());
});
main.js
var fs = require("fs");
const data = "\nGeeksForGeeks is a Computer Science portal.";
// Asynchronously appending data to file
fs.appendFile('sample.txt', data, 'utf8',
// Callback function
function(err) {
if (err) throw err;
// If no error
console.log("Data is appended to file successfully.")
});
fs.readFile('sample.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("Data in the file after appending: \n"
+ data.toString());
});
输出:
示例 2:同步追加方法
第 1 步:让我们创建一个名为main.js的 JavaScript 文件和一个名为sample.txt的文本文件,其中包含以下语句:
Hello World !
第 2 步:在main.js文件中添加以下代码并执行它:
main.js
var fs = require("fs");
// Synchronous read
console.log("Synchronous append method:");
var data = "\nGeeksForGeeks is a Computer Science portal.";
// Append data to file
fs.appendFileSync('sample.txt', data, 'utf8');
console.log("Data is appended to file successfully.")
data = fs.readFileSync('sample.txt');
console.log("Data in the file after appending is - \n" + data.toString());
输出:
2.异步方法:
异步函数不会阻塞程序的执行,即使前一个命令没有计算结果,每个命令也会在前一个命令之后执行。上一个命令在后台运行,并在完成处理后加载结果。因此,这些函数称为非阻塞函数。他们将回调函数作为最后一个参数。异步函数通常优于同步函数,因为它们不会阻塞程序的执行,而同步函数会阻塞程序的执行,直到程序完成处理。 NodeJS 中 fs 模块的一些异步方法有:
- fs.readFile()
- fs.rename()
- fs.write()
- fs.writeFile()
- fs.fsync()
- fs.appendFile()
- fs.stat()
- fs.readdir()
- fs.exists()
需要大量处理时间的操作,例如从数据库中查询大量数据,应该异步完成,因为其他操作仍然可以执行,从而减少程序的执行时间。
示例 1:异步读取方法
第 1 步:让我们创建一个名为main.js的 JavaScript 文件和一个名为sample.txt的文本文件,其中包含以下语句:
GeeksForGeeks is a Computer Science portal.
第 2 步:在main.js文件中添加以下代码并执行它:
main.js
var fs = require("fs");
// Asynchronous read
console.log("Asynchronous read method:");
fs.readFile('sample.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("Data in the file is - " + data.toString());
});
输出:
示例 2:异步追加方法
第 1 步:让我们创建一个名为main.js的 JavaScript 文件和一个名为sample.txt的文本文件,其中包含以下语句:
Hello World !
第 2 步:在main.js文件中添加以下代码并执行它:
main.js
var fs = require("fs");
const data = "\nGeeksForGeeks is a Computer Science portal.";
// Asynchronously appending data to file
fs.appendFile('sample.txt', data, 'utf8',
// Callback function
function(err) {
if (err) throw err;
// If no error
console.log("Data is appended to file successfully.")
});
fs.readFile('sample.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("Data in the file after appending: \n"
+ data.toString());
});
输出:
异步和同步方法的区别: Synchronous methods Asynchronous methodsSr.no 1. Synchronous functions are called blocking functions Asynchronous functions are called non-blocking functions. 2. It blocks the execution of the program until the file operation has finished processing. It does not block the execution of the program. 3. These functions take File Descriptor as the last argument. These functions take a callback function as the last argument. 4. Examples: fs.readFileSync(), fs.appendFileSync(), fs.writeFileSync() etc. Examples: fs.readFile(), fs.appendFile(), fs.writeFile(), fs.stat() etc.