📜  Node.js 中的文件处理

📅  最后修改于: 2022-05-13 01:56:33.824000             🧑  作者: Mango

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 中的异步文件处理而言,这是实现相同结果的另一种方法。