📜  Node.js fs.readFileSync() 方法

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

Node.js fs.readFileSync() 方法

fs.readFileSync() 方法是 fs 模块的内置应用程序编程接口,用于读取文件并返回其内容。
在 fs.readFile() 方法中,我们可以以非阻塞异步方式读取文件,而在 fs.readFileSync() 方法中,我们可以以同步方式读取文件,即告诉 node.js 阻塞其他并行处理并执行当前文件读取过程。即当调用 fs.readFileSync() 方法时,原节点程序停止执行,节点等待 fs.readFileSync()函数执行完毕,得到方法结果后,执行剩余节点程序。

句法:

fs.readFileSync( path, options )

参数:

  • path:它采用文本文件的相对路径。路径可以是 URL 类型。该文件也可以是文件描述符。如果两个文件都在同一个文件夹中,只需将文件名放在引号中即可。
  • options:它是一个可选参数,包含编码和标志,编码包含数据规范。它的默认值为null ,它返回原始缓冲区,并且标志包含文件中操作的指示。它的默认值为'r'。

返回值:此方法返回文件的内容。
示例 1:

  • input.txt 文件内容:
This is some text data which is stored in input.txt file.
  • index.js 文件:
javascript
// Node.js program to demonstrate the 
// fs.readFileSync() method
 
// Include fs module
const fs = require('fs');
  
// Calling the readFileSync() method
// to read 'input.txt' file
const data = fs.readFileSync('./input.txt',
            {encoding:'utf8', flag:'r'});
 
// Display the file data
console.log(data);


javascript
// Node.js program to demonstrate the 
// fs.readFileSync() method
 
// Include fs module
const fs = require('fs');
  
// Calling the fs.readFile() method
// for reading file 'input1.txt'
fs.readFile('./input1.txt',
        {encoding:'utf8', flag:'r'},
        function(err, data) {
    if(err)
        console.log(err);
    else
        console.log(data);
});
  
// Calling the fs.readFileSync() method
// for reading file 'input2.txt'
const data = fs.readFileSync('./input2.txt',
              {encoding:'utf8', flag:'r'});
 
// Display data
console.log(data);


输出:

This is some text data which is stored in input.txt file.

现在,问题是这个 fs.readFileSync() 方法与 fs.readFile() 方法有何不同。我们可以找出何时使用 fs.readFileSync() 和 fs.readFile() 方法的示例。
假设有两个输入文件input1.txtinput2.txt并且两个文件都保存在同一个文件夹中。
示例 2:

  • input1.txt 文件内容:
(1) This is some text data which is stored in input1.txt file.
  • input2.txt 文件内容:
(2) This is some text data which is stored in input2.txt file.
  • index.js 文件:

javascript

// Node.js program to demonstrate the 
// fs.readFileSync() method
 
// Include fs module
const fs = require('fs');
  
// Calling the fs.readFile() method
// for reading file 'input1.txt'
fs.readFile('./input1.txt',
        {encoding:'utf8', flag:'r'},
        function(err, data) {
    if(err)
        console.log(err);
    else
        console.log(data);
});
  
// Calling the fs.readFileSync() method
// for reading file 'input2.txt'
const data = fs.readFileSync('./input2.txt',
              {encoding:'utf8', flag:'r'});
 
// Display data
console.log(data);

输出:

(2) This is some text data which is stored in input2.txt file.
(1) This is some text data which is stored in input1.txt file.

观察:我们可以观察到,当我们调用读取'input1.txt'的 fs.readFile() 方法,然后我们调用读取'input2.txt'文件的 fs.readFileSync() 方法时,但看到输出我们发现先读取'input2.txt '文件然后读取'input1.txt'文件,这是因为当编译器编译node.js文件时,它首先调用读取文件的fs.readFile()方法,但并行它也继续编译剩余的程序,之后它调用读取另一个文件的fs.readFileSync()方法,当调用readFileSync()方法时,编译器停止其他并行进程(这里是读取 'input1.txt' 文件从readFile()方法)并继续正在进行的过程直到结束,每当正在进行的过程结束时,编译器就会恢复剩余的过程,这就是为什么我们观察到首先打印'input2.txt'的内容而不是'input1.txt' 的原因。因此,我们可以将fs.readFileSync()方法用于暂停其他并行进程和同步读取文件等任务。
参考: https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options