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文件:
// 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);
- 输出:
This is some text data which is stored in input.txt file.
现在,问题是该fs.readFileSync()方法与fs.readFile()方法有何不同。我们可以找到一个何时使用fs.readFileSync()方法和fs.readFile()方法的示例。
假设有两个输入文件input1.txt和input2.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文件:
// Node.js program to demonstrate the // fs.readFileSync() method // Include fs module const fs = require('fs'); // Callling 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()方法时,编译器将停止其他并行进程(此处是从readFile()方法中读取“ input1.txt”文件)并继续进行中的过程到此结束,无论正在进行的进程何时结束,编译器都会恢复剩余的进程,这就是为什么我们观察到首先打印“ input2.txt”的内容而不是“ input1.txt”的原因。因此,我们可以使用fs.readFileSync()方法执行诸如暂停其他并行进程并同步读取文件之类的任务。
参考: https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options
相关用法
- Node.js GM chop()用法及代码示例
- Node.js GM edge()用法及代码示例
- Node.js GM drawRectangle()用法及代码示例
- Node.js GM write()用法及代码示例
- Node.js GM whiteThreshold()用法及代码示例
- Node.js GM border()用法及代码示例
- Node.js GM magnify()用法及代码示例
- Node.js GM channel()用法及代码示例
- Node.js GM minify()用法及代码示例
注:本文由纯净天空筛选整理自NigattennoGokui大神的英文原创作品 Node.js | fs.readFileSync() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。