个人 黑马程序员Node.js学习笔记(二)
二.fs文件系统模块
01.什么是fs文件系统模块
fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:
fs.readFile() 方法,用来读取指定文件中的内容。
fs.writeFile() 方法,用来向指定的文件中写入内容。
如果要在JavaScript代码中,使用fs模块来操作文件,则需要使用
const fs = require('fs')
先导入fs模块。
02.读取指定文件中的内容
fs.readFile()的语法格式
使用 fs.readFile() 方法,可以读取指定文件中的内容,语法格式如下:
fs.readFile(path[, options], callback)
参数解读:
- 参数1:必选参数,指定一个文件路径的字符串,表示文件的存放路径。
- 参数2:可选参数,表示以什么编码格式来读取文件。
- 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
fs.readFile()的示例代码
const fs=require('fs');//导入fs模块,来操作文件
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
console.log(err);
//如果读取成功,则err的值为null 反之则为错误对象。
console.log('-----');
console.log(dataStr);
//如果读取成功 dataStr的值为读取的文件内容 反之则为undefined
})
判断文件是否读取成功
可以通过判断err对象是否为null,从而知晓文件读取的结果:
const fs=require('fs');
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
if(err){
return console.log('读取文件失败!'+err.message);
}
console.log('读取文件成功!'+dataStr);
})
03.向指定的文件中写入内容
fs.writeFile的语法格式
使用 fs.writeFile() 方法,可以读取指定文件中的内容,语法格式如下:
fs.writeFile(file,data[, options], callback)
参数解读:
- 参数1:必选参数,指定一个文件路径的字符串,表示文件的存放路径。
- 参数2:必选参数,表示要写入的内容。
- 参数3:可选参数,表示以什么格式写入文件内容,默认值是utf-8。
- 参数4:必选参数,文件写入完成后的回调函数。
fs.writeFile()的示例代码
const fs=require('fs');//导入fs模块,来操作文件
fs.writeFile('./files/2.txt','Misaka10045',function(err){
console.log(err);//如果文件写入成功,则err的值为null 反之则为一个错误对象
})
判断文件是否写入成功
可以通过判断err对象是否为null,从而知晓文件读取的结果:
const fs=require('fs');//导入fs模块,来操作文件
fs.writeFile('./files/2.txt','Misaka10045',function(err){
if(err){
return console.log('文件写入失败!'+err.message);
}
console.log('文件写入成功!');
})
04.练习-考试成绩整理
使用fs文件系统模块,将素材成绩.txt文件中的考试数据。整理到成绩-ok.txt文件中,
成绩.txt文件中的数据如下:
小红=99 小白=100 小黄=70 小黑=66 小绿=88
希望得到的成绩-ok.txt文件中的数据如下:
小红:99
小白:100
小黄:70
小黑:66
小绿:88
核心实现步骤
- 导入需要的fs文件系统模块
- 使用fs.readFile()方法,读取成绩.txt文件
- 判断文件是否读取失败
- 文件读取成功后,处理成绩数据
- 将处理完成的成绩数据,调用**fs.writeFile()**方法,写入到新文件 成绩-ok.txt中
实现代码
const fs =require('fs')//导入fs模块
fs.readFile('./素材/成绩.txt','utf8',function(err,dataStr){
if(err){//判断文件是否读取成功
return console.log('读取文件失败!'+err.message)
}
// console.log('读取文件成功!'+dataStr);
const arrOld = dataStr.split(' ')//先把成绩的数据,按照空格进行分割
const arrNew=[];
arrOld.forEach(item => {
arrNew.push(item.replace('=', ':'))
})//把分割后的字符 把 = 替换成 :
const newStr=arrNew.join('\r\n');//把数组合并成字符串
fs.writeFile('./files/成绩-ok.txt',newStr,function(err){
if(err){//判断文件是否写入成功
return console.log('写入文件失败!'+err.message);
}
console.log('成绩写入成功!');
})
})
05.fs模块-路径动态拼接
在使用fs模块操作文件时,如果提供的操作路径是相对路径,就可能会出现路径动态拼接错误的问题。
原因:
代码在运行的时候,会以执行node命令所处的目录,动态拼接出被操作文件的完整路径。
解决方案:
在使用fs模块操作文件时,直接提供完整的路径。
缺点是移植性非常差,不利于维护。
完美解决方案:
__dirname表示当前文件所处的目录。
可通过 __dirname 来表示操作路径 可完美解决动态拼接问题。
示例:
fs.readFile(__dirname+'/files/1.txt','utf-8',function(err,dataStr){
if(err){
return console.log('读取文件失败!'+err.message)
}
console.log('读取文件成功!'+dataStr)
})