You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS中readFileSync读取其他目录文件返回值输出为空是什么原因?

核心原因

readStream.pipe(writeStream)属于异步流式操作,代码执行到这一行后不会等待文件写入完成,会立刻向下执行readFileSync读取逻辑。此时./data/info2.txt还在写入过程中,要么没有写入任何内容,要么文件句柄未被正常关闭,因此读取结果为空。
之前将txt文件放在同级目录可正常读取,是因为对应文件已经提前完成写入,不存在异步时序冲突。

修复方案

仅需要将同步读取逻辑放到写入流的finish事件回调中,保证写入完全结束后再执行读取即可,完全符合同步读取的使用要求:

const fs = require('fs');
const path = require('path');
try {
    const readStream = fs.createReadStream('./info.txt', 'utf8');
    const writeStream = fs.createWriteStream('./data/info2.txt', 'utf8');
    readStream.pipe(writeStream);

    // 等待写入流完全结束后再执行读取
    writeStream.on('finish', () => {
        let file = fs.readFileSync( './data/info2.txt', 'utf8');
        console.log(file.toString());
    });
} catch (error) {
    if (error) console.log(error);
}

路径优化建议

硬编码的相对路径./data/info2.txt是相对于执行node命令的工作目录解析的,如果你在其他目录下执行该JS文件会出现路径找不到的问题。可以替换为path.resolve(__dirname, './data/info2.txt'),路径会自动按照当前JS文件的所在目录解析,兼容性更好。

内容的提问来源于stack exchange,提问作者Nagusameta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:45:03