在使用fs模块操作文件是,如果使用./或../开头的相对路径时,很容易出现路径动态拼接错误。原因是在代码运行的时候,会执行node命令所处的目录,动态拼接出被操作的完整路径。
const fs=require('fs')
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
if(err){
return console.log('文件读取失败'+err.message)
}
console.log('文件读取成功')
})
出现路径拼接是因为是相对路径,采用绝对路径则不会。
采用绝对路径,移植性特别差,不利于维护。
_ _dirname表示当前文件所处的目录
const fs=require('fs')
fs.readFile(__dirname+'/files/1.txt','utf8',function(err,dataStr){
if(err){
return console.log('文件读取失败'+err.message)
}
console.log('文件读取成功')
})
path模块是node.js官方提供的,用来处理路径的模块,提供了一系列的属性和方法,用来满足用户对路径的处理需求。
path.join()方法,将多个路径片段拼接成一个完整的路径字符串
path.basename()方法,用来从路径字符串中,将文件名解析出来。
使用如下的方法进行导入
const path = require('path')
const pathStr =path.join('/a','/b/c','../','./d','e')
console.log(pathStr)
//输出为\a\b\d\e
//输出没有c,是因为../抵消之前的一个目录。
const path=path.join(__dirname+'./1.txt')
console.log(path)
path.basename(path,[ext])
path,必选参数,表示一个路径的字符串
ext,可选参数,表示文件扩展名
const fpath='/a/b/c/index.html'
var fullName =path.basename(fpath)
console.log(fullName) //输出index.html
var nameWithoutExt = path.basename(fpath,'.html')
console.log(nameWithoutExt) //输出index
path.extname(path)方法,可以获取路径中的扩展名部分,
const fpath='/a/b/c/index.html'
const fext=path.extname(fpath)
console.log(fext) //输出.html