前言:很多小伙伴学习node.js时很苦恼吧,一篇带你轻松理解fs文件系统模块。
目录
一、概念理解
定义:fs模块是Node,js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
两个重要方法:
-
fs.readFile()方法,用来读取指定文件中的内容
-
fs.writeFile()方法,用来向指定的文件中写入内容
const fs=require('fs')
二、读取指定文件中的内容
2.1、实例1:读取文件
// 1.导入fs模块,来操作文件,用fs接受fs模块
const fs =require('fs');
// 读取成功后
//2.调用fs.readFile()方法读取文件
// 参数1:读取文件的存放路径
// 参数2:读取文件是采用编码格式,一般默认指定utf-8
// 参数3:回调函数,拿到读取失败和成功的结果 err(失败的结果) dataStr(成功的结果)
fs.readFile('./files/11.txt','utf-8',function(err,dataStr){
// 2.1打印失败的结果
// 如果读取成功,则err的值为null
// 如果读取失败,这err的值为错误对象,dataStr的值为undefined
console.log(err);
console.log('-----');
// 2.2打印成功的结果
console.log(dataStr);
})
运行结果:
![](https://img-blog.csdnimg.cn/1c81ec16359e401f9fb30797527589c4.png)
2.2、实例2:判断文件是否读取成功
通过err的值来判断
const fs =require('fs');
fs.readFile('./files/11.txt','utf-8',function(err,dataStr){
if(err){
return console.log('读取文件失败'+err.message)
}
console.log('读取文件成功'+ dataStr);
})
运行结果:
![](https://img-blog.csdnimg.cn/546a7e6c6b8347c38cb13b25319ac865.png)
三、写入文件
![](https://img-blog.csdnimg.cn/6d76923fda08433ca87405b56d1c35db.png)
3.1实例:
// 1.导入fs文件系统模块
const fs = require('fs')
//2.调用fs.writeFile()方法,写入文件的内容
// 参数1:表示文件的存放路径
// 参数2:表示要写入的内容
// 参数3:回调函数
fs.writeFile('./files/11.txt','hello node.js',function(err){
//2.1如果文件写入成功,则err的值等于null
// 2.2如果文件写入失败,则err的值等于一个错误对象
console.log(err);
})
运行结果:
![](https://img-blog.csdnimg.cn/18adae3e0e98446da9706d20f3c4eff1.png)
3.2、实例4:判断写入是否成功
// 1.导入fs文件系统模块
const fs = require('fs')
//2.调用fs.writeFile()方法,写入文件的内容
// 参数1:表示文件的存放路径
// 参数2:表示要写入的内容
// 参数3:回调函数
fs.writeFile('./files/11.txt','hello node.js',function(err){
//2.1如果文件写入成功,则err的值等于null
// 2.2如果文件写入失败,则err的值等于一个错误对象
// console.log(err);
//判断文件是否写入成功
if (err) {
return console.log("读取文件失败" + err.message);
}
console.log("读取文件成功");
})
运行结果:
![](https://img-blog.csdnimg.cn/f71ba4c4573f4d9994032031f9483e55.png)
四、fs模块-路由动态拼接的问题
在使用fs模块操作文件时,如果提供的操作路径是以/或../开头的相对路径时,很容易出现路径动态拼接错误的问题.原因:代码在运行的时候,会以执行node命令时所处的目录,动态拼接出被操作文件的完整路径。
![](https://img-blog.csdnimg.cn/83cfaad72b7044658915664bb384ae9e.png)
4.1、解决办法1:提供完整路径
在使用fs模块操作文件时,直接提供完整的路径,不要提供/或..开头的相对路径,从而防止路径动态拼接的问题。
4.2、解决办法2:使用__dirname
__dirname表示当前文件所处的目录再字符拼接
4.3、代码演示
//原始方法
const fs = require("fs");
fs.readFile("./files/11.txt", "utf-8", function (err, dataStr) {
if (err) {
return console.log("读取文件失败" + err.message);
}
console.log("读取文件成功" + dataStr);
});
//改进方法,提供完整的文件存放路径
// 注意使用转义字符\否则无法读取路径
const fs = require("fs");
fs.readFile("E:前端\\nodejsketangwangke\\fs文件系统模块\\files\\11.txt",
"utf-8",
function (err, dataStr) {
if (err) {
return console.log("读取文件失败" + err.message);
}
console.log("读取文件成功" + dataStr);
}
);
//改进方法2:__dirname表示当前文件所处的目录,再字符拼接
const fs = require("fs");
fs.readFile(__dirname+"./files/11.txt","utf-8",function (err, dataStr) {
if (err) {
return console.log("读取文件失败" + err.message);
}
console.log("读取文件成功" + dataStr);
}
);
五、实战练习:考试成绩整理
5.1、要求:
![](https://img-blog.csdnimg.cn/5ba6af2a1f7c4e4f8bafb1622f35c6a4.png)
5.2、步骤:
![](https://img-blog.csdnimg.cn/03917af8d41f4cb29c2abe847ad0e39d.png)
5.3、代码实现
// 1.导入fs模块,来操作文件,用fs接受fs模块
const fs = require("fs");
//2.调用fs.readFile()方法读取文件
fs.readFile("./files/chengj.txt", "utf-8", function (err, dataStr) {
// 3.判断是否读取成功
if (err) {
return console.log("读取失败" + err.message);
}
// else {
// // return console.log("读取成功" + dataStr);
// }
// 4.1先把成绩是数据按照空格进行分割
const arrOld = dataStr.split(" ");
console.log(arrOld);
// 4.2循环分割后的数组,对每一项数据进行字符串的替换操作
const arrNew = [];
// 针对每一项数据,将等号换成冒号
arrOld.forEach((item) => {
arrNew.push(item.replace("=", ":"));
});
// 4.3把新数组中的每一项进行合并,得到一个新的字符串
const newStr=arrNew.join('\r\n')
console.log(newStr);
// 5.调用fs.writeFile()方法,把处理完毕的成绩,写入到新文件中
fs.writeFile('./files/chengji-ok.txt',newStr,function(err){
if(err){
return console.log('写入文件失败!'+ err.message);
}
console.log('成绩写入成功!');
})
});