fs.createReadStream找不到文件

时间:2018-06-26 09:17:36

标签: javascript node.js fs

我现在正在使用“ Beginning Node.js”教科书来学习Node.js。

本书中的示例在命令提示符下无法正确执行。 (我使用的是带有Node v9.4.0的Ubuntu 18.04,该书已经发行了三年,所以这可能有关吗?)

在该书的可下载源代码中,这是所提供的代码:

var fs = require('fs');

// Create readable stream
var readableStream = fs.createReadStream('./cool.txt');

// Pipe it to out stdout
readableStream.pipe(process.stdout);

文件cool.txt位于父目录中。

-parentFolder

---- jsFileToExecute.js

---- cool.txt

当我在命令提示符下运行node jsFileToExecute.js时,得到以下响应:

events.js:137
      throw er; // Unhandled 'error' event
      ^

Error: ENOENT: no such file or directory, open './cool.txt'

由于此源代码直接来自教科书出版商的网站,但仍无法运行,我假设它有问题吗?

寻找解决方案以弄清楚为什么它不起作用。我查看了nodejs.org上的文档,但没有找到任何线索。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:4)

为避免路径问题,建议使用path.join,例如:

const path = require('path');

const coolPath = path.join(__dirname, 'cool.txt');
const readableStream = fs.createReadStream(coolPath);

在上面的示例中,您正在创建指向文件的路径,该路径引用存储在名为__dirname的全局变量中的脚本的当前目录。

答案 1 :(得分:0)

如果文件与您当前正在运行项目的目录位于同一目录中,那么您只需键入文件名即可,而不用像./或/这样在此处提供路径:

var fs = require('fs');

// Create readable stream
var readableStream = fs.createReadStream('cool.txt');

// Pipe it to out stdout
readableStream.pipe(process.stdout);

它将与从同一目录读取文件一样工作