Node.js同步读取文件作为字符串(不是缓冲区)

时间:2018-12-07 16:43:37

标签: javascript node.js string file buffer

如何在Node.js中以字符串而不是缓冲区的形式读取文件?我正在用Node.js编写程序。在那里,我需要同步读取文件,但是如果这样做,它将作为缓冲区而不是字符串返回它。我的代码如下:

const fs = require('fs');

let content = fs.readFileSync('./foo.txt');
console.log(content) // actually logs it as a buffer

请帮助。

2 个答案:

答案 0 :(得分:1)

fs.readFileSync使用第二个参数,该参数使您可以指定带有选项的JSON对象,包括返回数据的编码。如果未指定,默认情况下它将返回Buffer。因此,您可以在此示例中添加编码,以将其作为字符串返回。

让我们在此示例中添加编码选项,在此示例中我们设置了content变量。我们将编码设置为UTF-8,这是一个标准。

let content = fs.readFileSync('./foo.txt', {encoding: 'utf8'});

如果您不需要指定任何其他选项,则还有一个快捷方式:

let content = fs.readFileSync('./foo.txt', 'utf8');

现在,当我们登录content时,我们应该使用String作为结果。

官方文档:https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options

答案 1 :(得分:0)

除了传递可确保您获得字符串而不是缓冲区的编码外,fs.readFileSync函数的options参数还允许您传递标志。

此方法的默认标志是“ r”,它将打开文件以供读取。如果要打开它进行读写,则应传递另一个标志-“ r +”。

如果您要打开文件进行读写操作,而不仅仅是阅读,您的代码将如下所示:

const content = fs.readFileSync('./foo.txt/', 'utf-8', 'r+');
console.log(content);

由于这是node.js,因此应该考虑使用异步fs.readFile函数。当然,您必须为此传递回调。