使用vscode编写js代码,运行环境时node.js 版本为v10.14.2
使用fs.readFile('../成绩.txt', 'utf8', function(err, dataStr) {} 读取文本文件
读取文件
文件名:成绩.txt
小红=99 小白=100 小黄=70 小黑=66 小绿=88
情况一:添加'utf8'参数
// 导入fs文件系统模块
const fs = require('fs');
//进行读取文件操作
//当未指定编码格式时,dataStr是对象类型,而非字符串!!
fs.readFile('../素材/成绩.txt','utf8',function(err, dataStr) {
//判断读取文件是否成功
if (err) {
return console.log('读取文件失败:' + err.message)
}
//当未指定编码格式时,dataStr是对象类型,而非字符串!!
console.log(dataStr);
console.log(typeof dataStr);
console.log('读取文件成功:' + dataStr);
})
情况二:未添加'utf8'参数
// 导入fs文件系统模块
const fs = require('fs');
//进行读取文件操作
//当未指定编码格式时,dataStr是对象类型,而非字符串!!
fs.readFile('../素材/成绩.txt','utf8',function(err, dataStr) {
//判断读取文件是否成功
if (err) {
return console.log('读取文件失败:' + err.message)
}
//当未指定编码格式时,dataStr是对象类型,而非字符串!!
console.log(dataStr);
console.log(typeof dataStr);
console.log('读取文件成功:' + dataStr);
})
编写读取文件操作时,
未加'utf8'时,dataStr使用typeof返回值是Object,不能使用Split方法对dataStr进行操作,并且打印dataStr时输出为
<Buffer e5 b0 8f e7 ba a2 3d 39 39 20 e5 b0 8f e7 99 bd 3d 31 30 30 20 e5 b0 8f e9 bb 84 3d 37 30 20 e5 b0 8f e9 bb 91 3d 36 36 20 e5 b0 8f e7 bb bf 3d 38 38>
加上'utf8'时,dataStr使用typeof返回值是String,便能使用Split方法,并且打印dataStr时输出为
小红=99 小白=100 小黄=70 小黑=66 小绿=88
为什么两种情况返回的dataStr是不同类型的
Node.js 的 fs.readFile 方法默认不指定编码时,会将文件的内容作为一个 Buffer 对象返回。Buffer 对象是 Node.js 中的一种数据类型,它用于处理二进制数据。因此,如果不指定编码,fs.readFile 方法返回的内容类型为 object。
你可以使用 toString 方法将 Buffer 对象转换为字符串,例如:
fs.readFile('file.txt', function(err, data) {
if (err) throw err;
console.log(data.toString());
});
你后面的打印,字符串拼接其实暗含了需要dataStr转换为字符串输出的意思
console.log('读取文件成功:' + dataStr);