Node.js如何同步读取文件内容?

Posted

技术标签:

【中文标题】Node.js如何同步读取文件内容?【英文标题】:How to read the content of files synchronously in Node.js? 【发布时间】:2016-03-12 03:47:28 【问题描述】:

这就是我所拥有的:

#! /usr/bin/env node

var fs = require('fs'),
    files = fs.readdirSync(__dirname + '/files/'),

files.forEach(function(file) 
  fs.readFile(__dirname + '/files/' + file, 'utf8', function (error, data) 
    console.log(data)
  )
)

即使我使用的是readdirSync,输出仍然是异步的:

alex@alex-K43U:~/node/readFiles$ node index.js 
foo 1

foo 3

foo 2

如何修改代码使输出同步?

alex@alex-K43U:~/node/readFiles$ node index.js 
foo 1

foo 2

foo 3

【问题讨论】:

我认为您的问题是 forEach 不保证订单,您应该尝试使用愚蠢的 for 循环。另外,如果你想同步读取文件,你应该使用 readFileSync 【参考方案1】:

那是因为您异步读取文件。试试:

#! /usr/bin/env node

var fs = require('fs'),
    files = fs.readdirSync(__dirname + '/files/'),

files.forEach(function(file) 
  var data = fs.readFileSync(__dirname + '/files/' + file, 'utf8');
  console.log(data);
);

NodeJS Documentation for 'fs.readFileSync()'

【讨论】:

【参考方案2】:

你见过readFileSync吗?我想那可能是你的新朋友。

【讨论】:

【参考方案3】:

您需要使用readFileSync,您的方法仍在异步读取文件,这可能导致打印内容乱序,具体取决于每次读取时发生回调的时间。

var fs = require('fs'),
    files = fs.readdirSync(__dirname + '/files/');

files.forEach(function(file) 
  var contents = fs.readFileSync(__dirname + '/files/' + file, 'utf8');
  console.log(contents);
)

【讨论】:

以上是关于Node.js如何同步读取文件内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 HTML 输入文件导入 excel 文件并在 Node.js 中读取文件内容(如何将完整路径发送到 Node.js)

如何在 Node.js 中读取文件内容并将数据转换为 JSON?

Node.js:如何在提交时读取用户选择选项并在 textarea 中提供文件内容

Node.js学习之路05——fs文件系统之文件的写入和读取

Node.js 初识 fs 模块

node.js如何将远程的文件下载到本地解压读取