1. 什么是fs文件系统模块
fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如
- fs.readFile()方法,用来读取指定文件中的内容
- fs.writeFIle()方法,用来向指定的文件中写入内容
如果要在Javascript代码中使用fs模块来操作文件,则需要使用如下方法优先导入
const fs = require('fs')
2. 如何读取文件内容
2.1 fs.readFile()的语法格式
使用 fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:
fs.readFile(path[,options],callback)
参数解读:
- 参数1:必选参数,字符串,表示文件路径。
- 参数2:可选参数,表示以什么编码格式来读取文件
- 参数3:必选参数,文件读取完成之后,通过回调函数拿到读取的结果。 代码示例:
// 1.导入fs模块来操作文件
const fs = require("fs");
// 2.调用fs.readFile()方法读取文件
// 参数1:读取文件的存放路径
// 参数2:读取文件时采用的编码格式,一般默认指定utf8
// 参数3:回调函数,拿到读取失败和成功的结果 err dataStr
fs.readFile("./file/11.txt", "utf8", (err, dataStr) => {
// 2.1 打印失败的结果、
// 如果读取成功,则err为null
console.log("失败", err);
// 如果读取失败,则err的值为错误对象,dataStr的值为undefined
// 2.2 打印成功的结果
console.log("成功", dataStr);
});
3.如何向指定文件中读取内容
3.1 fs.writeFile()的语法格式
使用fs.writeFile()方法,可以向指定的文件中写入内容,语法格式如下:
fs.writeFile(file,data[,options],callback)
- 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
- 参数2:必选参数,表示要写入内容。
- 参数3:可选参数,表示以什么格式写入文件内容,默认值是utf8.
- 参数4:必选参数,文件写入完成后的回调函数
fs.writeFile("./file/2.txt", "abcd", (err) => {
// 如果文件写入成功,则err的值等于null
// 如果文件写入失败,则err的值等于一个错误对象
console.log(err);
if (err) {
console.log("文件写入失败");
} else {
console.log("文件写入成功");
}
});
fs.readFile("./file/2.txt", "utf8", (err, dataStr) => {
// console.log(err);
console.log(dataStr);
});
3.2 案例:整理成绩
// file/成绩-ok.txt
小红=99 小白=100 小黄=70 小黑=66 小绿=88
const fs = require("fs");
fs.readFile("./file/成绩-ok.txt", "utf8", (err, dataStr) => {
if (err) {
console.log("读取失败", err.message);
} else {
console.log(dataStr);
// 把字符串按空格分割成数组
const arr = dataStr.split(" ");
console.log(arr);
const resArr = [];
// 对每一项数据的=进行字符串替换处理
arr.forEach((item) => {
resArr.push(item.replace("=", ":"));
});
// \r\n回车换行
// 将数组的每一项进行合并得到一个新的字符串
const resStr = resArr.join("\r\n");
// 调用fs.writeFile()方法,把处理完毕的成绩写入新的文件中
fs.writeFile("./file/成绩-ok.txt", resStr, (err) => {
if (err) {
return console.log("写入文件错误");
}
console.log("成绩写入成功");
});
}
});
3.3 路径问题
在使用fs模块操作文件时,如果时使用./或者../开头的相对路径时容易出现路径拼接错误问题
原因:代码在运行时,会以执行node命令时所处目录动态拼接被操作文件的完整路径相对路径
// 相对路径
// 如果不在当前文件夹运行会读取失败
fs.readFile("./file/成绩-ok.txt", "utf8", (err, dataStr) => {
if (err) {
return console.log("读取文件失败", err.message);
}
console.log("读取文件成功", dataStr);
});
// 2.使用绝对路径(完整路径)
// 移植性差,不利于维护
fs.readFile(
"E:\\Allproject\\Node.js\\day1\\file\\成绩-ok.txt",
"utf8",
(err, dataStr) => {
if (err) {
return console.log("读取文件失败", err.message);
}
console.log("读取文件成功", dataStr);
}
);
// 3.__dirname 表示当前文件所处的目录
console.log(__dirname);
fs.readFile(__dirname + "/file/成绩-ok.txt", "utf8", (err, dataStr) => {
if (err) {
return console.log("读取文件失败", err.message);
}
console.log("读取文件成功", dataStr);
});