什么是 fs 文件系统模块
fs是
node.js提供的读取和写入的方法来操纵文件的模块
。
接下来我们聊聊三点内容,如何读取文件
,写入文件
以及一个动态路径的解决问题
。
在使用fs的方法之前,首先要导入fs,代码很简单,也很固定:
const fs = require('fs');
然后就可以执行一下读取和写入方法了:
fs.readFile()
方法,用来读取指定文件中的内容fs.writeFile()
方法,用来向指定的文件中写入内容
读取指定文件中的内容
fs.readFile()
的语法格式:
fs.readFile(path[,option],callback);
- 参数1
path
:必选参数,字符串,表示文件的路径。 - 参数2
option
:可选参数,表示以什么编码格式来读取文件。 - 参数3
callback
:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
举个栗子:
以 utf8 的编码格式,读取指定文件的内容,并打印 err 和 dataStr 的值:
const fs = require('fs');
fs.readFile('./file/1.txt','utf8',function(err,dataStr){
console.log(err); // 打印失败返回的值
console.log(-------------);
console.log(dataStr); // 打印成功读取返回的数据
})
聊一下读取成功和读取失败时,err
和dataStr
返回值分别是什么:
读取成功时时:
- err返回值:
null
; - dataStr返回值: 是所访问文件的内容;
读取失败时:
- err返回值: 是错误信息; 可以通过err.message来打印出来具体的错误信息。
- dataStr返回值:
undefined
;
判断文件是否读取成功
上面我们说到,读取成功时,err的值为null
,那么可以判断 err 对象是否为 null,从而知晓文件读取的结果:
const fs = require('fs');
fs.readFile('./file/1.txt','utf8',function(err,dataStr){
if(err){
return console.log('文件读取失败'+err.message);
}
console.log('文件读取成功'+dataStr);
})
tips:
中间的编码格式默认是utf8,如果编码格式为utf8那么就可以忽略不写。
向指定的文件中写入内容
fs.writeFile() 的语法格式
fs.writeFile(file,data[,option],callback);
- 参数1
file
:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。 - 参数2
data
:必选参数,表示要写入的内容。 - 参数3
option
:可选参数,表示以什么格式写入文件内容,默认值是 utf8。 - 参数4
callback
:必选参数,文件写入完成后的回调函数。
向指定的文件中写入内容
举个栗子:
const fs = require('fs');
fs.writeFile(./file/2.txt,'hello 我就是被写入的内容',function(err){
console.log(err);
})
判断文件是否写入成功
方法同上:判断 err 对象是否为 null,从而知晓文件写入的结果:
const fs = require('fs');
fs.writeFile(./file/2.txt,'hello 我就是被写入的内容',function(err){
if(err){
return console.log('文件被写入失败'+err.message);
}
console.log('文件被写入成功');
})
路径动态拼接的问题
在使用 fs 模块操作文件时,如果提供的操作路径是以 ./
或 ../
开头的相对路径时,很容易出现路径动态拼接错误的问题。
原因: 代码在运行的时候,会以执行 node 命令时所处的目录
,动态拼接出被操作文件的完整路径。
解决方案: 在使用 fs 模块操作文件时,直接提供完整的路径
,不要提供 ./ 或 …/ 开头的相对路径,从而防止路径动态拼接的问题。
说两种方法:
- 第一种直接提供绝对路径(移植性非常差、不利于维护)
- 第二种通过__dirname来补全绝对路径
// 第一种
// 移植性非常差、不利于维护
fs.readFile('C:\\Users\\escook\\Desktop\\code\\file\\1.txt', 'utf8', function(err, dataStr) {
if (err) {
return console.log('读取文件失败!' + err.message)
}
console.log('读取文件成功!' + dataStr)
})
//第二种:
// __dirname 表示当前文件所处的目录
fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, dataStr) {
if (err) {
return console.log('读取文件失败!' + err.message)
}
console.log('读取文件成功!' + dataStr)
})
tips:
读取方法返回的函数中有两个形参,写入方法的返回函数中只有一个形参;
其实使用__dirname还不是最好的方法,因为node.js的模块中还有更加方便的。path方法,用于拼接路径,获取文件名称,已经文件后缀
那么接下来就说说Path模块
path 路径模块
什么是 path 路径模块
它提供了一系列的方法和属性,用来满足用户对路径的处理
需求。
举个栗子:
path.join()
方法,用来将多个路径片段拼接成一个完整的路径字符串
path.basename()
方法,用来从路径字符串中,将文件名解析出来
那么想使用这个方法,我们和fs一样要先导入它
const path = require('path');
那么接下来聊聊这两个方法如何使用:
path.join()
的语法格式:
使用 path.join()
方法,可以把多个路径片段拼接为完整的路径字符串;
const path = require('path')
const fs = require('fs')
// 注意: ../ 会抵消前面的路径
// const pathStr = path.join('/a', '/b/c', '../../', './d', 'e')
// console.log(pathStr) // \a\b\d\e
// fs.readFile(__dirname + '/files/1.txt')
fs.readFile(path.join(__dirname, './files/1.txt'), 'utf8', function(err, dataStr) {
if (err) {
return console.log(err.message)
}
console.log(dataStr)
})
tips
:…/ 会抵消前面的路径
这种方式搭配fs来获取文件内容,才是绝配;
获取路径中的文件名:
使用 path.basename()
方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名:
这个获取而来的文件名有两种,第一种是含有后缀的,第二种是不含有后缀的;先说第一种:获取含有后缀的文件名:
const path = require('path')
// 定义文件的存放路径
const fpath = '/a/b/c/index.html'
const fullName = path.basename(fpath)
console.log(fullName) // 此时的输出结果是index.html
第二种:获取没有后缀的文件名:
const path = require('path')
const fpath = '/a/b/c/index.html'
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt) // 此时的输出结果是去掉了.html后缀的 index
tips:
path.basename()的作用是获取文件名称的,它的第二个参数是用来去除不想要的后缀。
path为我们还提供了一个方法是只获取文件名的后缀:也就是path.extname()
使用方法很简单,只用把我们需要获取的目标文件的路径放进去,它的输出结果就是这个文件的后缀;
举个栗子:
const fpath = '/a/b/c/index.html'; // 定义一个路径字符串
const fext = path.extname(fpath);
console.log(fext); // 输出结果就是:.html
不断复盘,不断优秀,踏实做人,认真做事;关注三连,持续更新~~~