Node.js如何读取txt文件?该如何正确配置文件路径?
Node.js 文件路径配置规则
现有代码问题说明
你当前控制台输出Buffer内容,并非路径配置错误,是调用readFile时未指定字符编码,补充编码参数即可输出明文内容,修改示例:
var fs = require('fs'); fs.readFile('/Users/PC/Desktop/tutorial/text.txt', 'utf8', function (err, data) { if (err) throw err; console.log(data); });
路径分类及使用规则
Node.js的fs模块支持两类路径格式,规则如下:
- 绝对路径:从系统根目录出发的完整路径
- macOS/Linux 写法示例:
/Users/PC/Desktop/tutorial/text.txt - Windows 写法示例:
C:/Users/PC/Desktop/tutorial/text.txt,也支持转义后的反斜杠C:\\Users\\PC\\Desktop\\tutorial\\text.txt - 优点是路径固定,不会受执行环境影响,缺点是迁移到其他设备时需要修改路径
- macOS/Linux 写法示例:
- 相对路径:以
.或者..开头的路径,路径基准为执行node命令时的终端工作目录(注意不是js文件本身的存放目录)- 比如你在
/Users/PC/Desktop目录下执行node tutorial/fileread.js,此时相对路径./text.txt对应的实际路径为/Users/PC/Desktop/text.txt,而非tutorial目录下的文件 - 优点是写法简洁,缺点是执行命令的工作目录变化时容易找不到文件
- 比如你在
最佳实践
推荐使用内置变量__dirname配合path模块拼接路径,__dirname的值为当前js文件所在目录的绝对路径,不受执行命令的工作目录影响,跨操作系统兼容性好,示例代码:
var fs = require('fs'); var path = require('path'); // 拼接当前js文件同目录下的text.txt的绝对路径 var targetPath = path.join(__dirname, './text.txt'); fs.readFile(targetPath, 'utf8', function (err, data) { if (err) throw err; console.log(data); });
如果需要获取执行node命令时的工作目录,可以调用process.cwd()方法。
注意事项
- macOS/Linux系统下路径大小写敏感,Windows系统默认不敏感,建议严格匹配实际文件名的大小写,避免跨平台运行出错
- 不需要手动转义路径中的空格、特殊字符,
path.join方法会自动适配处理
内容的提问来源于stack exchange,提问作者user16172780
相关产品推荐
相关产品推荐

