Node.js 中的文件处理
编程语言提供的最重要的功能是从计算机读取和写入文件。 Node.js 提供了从计算机读取和写入文件的功能。在 Node.js 中读取和写入文件是通过使用称为fs 模块的最酷的 Node.js 模块之一完成的,它是最知名的内置 Node.js 模块之一。
该文件可以在 node.js 中以同步和异步方式读取和写入。同步方法是一种代码阻塞方法,这意味着给定方法将阻塞代码的执行,直到其执行完成(即读取或写入完整文件)。另一方面,异步方法具有回调函数,该函数在给定方法的执行完成时执行,因此允许代码在其执行完成期间运行。或者根据现代 JavaScript,异步方法返回一个 Promise,这意味着正在进行的异步方法最终完成,Promise 将被解析或拒绝。因此,它是非阻塞的。
同步读取文件的方法:要以同步模式读取文件,我们使用 fs 模块中的方法 readFileSync()。它有两个参数,第一个是完整路径的文件名,第二个参数是字符编码,一般是'utf-8'。
javascript
// Require the given module
var fs = require('fs');
// Use readFileSync() method
// Store the result (return value) of this
// method in a variable named readMe
// Keep the file in the same folder so
// donot need to specify the complete path
var readMe = fs.readFileSync('readMe.txt', 'utf-8');
// log the content of file stored in
// a variable to screen
console.log(readMe);
javascript
// Require the given module
var fs = require('fs');
// Use readFileSync() method
// Store the result (return value) of this
// method in a variable named readMe
var readMe = fs.readFileSync('readMe.txt', 'utf-8');
// Store the content and read from
// readMe.txt to a file WriteMe.txt
fs.writeFileSync('writeMe.txt', readMe);
javascript
// Require the given module
var fs = require('fs');
// Use readFile() method
fs.readFile('readMe.txt', 'utf-8', function(err, data) {
// Write the data read from readeMe.txt
// to a file writeMe.txt
if( !err )
fs.writeFile('writeMe.txt', data, (err)=>{
if( err ) {
throw err;
}
});
else
throw err;
});
Javascript
const {writeFile,readFile} = require('fs')
const {promisify} = require('util')
const readFileasync = promisify(readFile);
const writeFileasync = promisify(writeFile);
const file_handler = async()=>{
try {
const content = await writeFileasync('./writeMe.txt',"hello world");
try {
const data = await readFileasync('./writeMe.txt','utf-8');
console.log('New file has been created .');
console.log(data);
} catch (error) {
throw error;
}
} catch (error) {
throw error;
}
}
file_handler();
输出:
同步写入文件的方法:为了以同步模式写入文件,我们使用 fs 模块中的 writeFileSync() 方法。它有两个参数,第一个是要写入内容的完整路径的文件名,第二个参数是要写入文件的数据。
javascript
// Require the given module
var fs = require('fs');
// Use readFileSync() method
// Store the result (return value) of this
// method in a variable named readMe
var readMe = fs.readFileSync('readMe.txt', 'utf-8');
// Store the content and read from
// readMe.txt to a file WriteMe.txt
fs.writeFileSync('writeMe.txt', readMe);
读取和写入文件的异步方法:要在 fs 模块中以异步模式读取/写入文件,我们使用 readFile() 和 writeFile() 方法。 fs.readFile() 带三个参数,第一个是带完整路径的文件名,第二个参数是字符编码,一般为'utf-8',第三个参数是回调函数(读取完整文件后触发) ) 有两个参数,一个是读取文件时发生错误时的错误,第二个是我们读取文件后检索到的数据,fs.writeFile() 也有三个参数,文件名及其完整路径,第二个参数是要写入文件的数据,第三个是回调函数,在写入文件时发生错误时触发。
注意:异步方法首先完成任务(读取文件),然后触发回调函数。
javascript
// Require the given module
var fs = require('fs');
// Use readFile() method
fs.readFile('readMe.txt', 'utf-8', function(err, data) {
// Write the data read from readeMe.txt
// to a file writeMe.txt
if( !err )
fs.writeFile('writeMe.txt', data, (err)=>{
if( err ) {
throw err;
}
});
else
throw err;
});
输出:
如果我们谈论 Node.js 中的异步文件处理方法 Promise,我们必须使用Promisify方法,该方法将遵循回调方法的函数作为输入,并返回该函数的版本,该版本返回一个 Promise。代码如下图所示(这里采用了async-await方法):
Javascript
const {writeFile,readFile} = require('fs')
const {promisify} = require('util')
const readFileasync = promisify(readFile);
const writeFileasync = promisify(writeFile);
const file_handler = async()=>{
try {
const content = await writeFileasync('./writeMe.txt',"hello world");
try {
const data = await readFileasync('./writeMe.txt','utf-8');
console.log('New file has been created .');
console.log(data);
} catch (error) {
throw error;
}
} catch (error) {
throw error;
}
}
file_handler();
让我们看看终端,看看代码是否有效。
因此,就 Node.js 中的异步文件处理而言,这是实现相同结果的另一种方法。