node.js-path 路径

前言

在fs文件系统中我们读文件和写文件时如果使用的是相对路径,那么就容易出现路径动态拼接错误的问题。
原因:在运行代码时,会以node命令所处的命令,动态拼接出被操作文件的完整路径。

实例

我们读取file目录下test.txt文件。我在E:\deyun\node\path路径下执行这段代码,它可以读取出来,因为它此时拼接出来的路径为E:\deyun\node\path\file

//1.导入文件系统模块
const fs = require('fs')
//2.调用fs.readFile()方法读取文件
fs.readFile('./file/test.txt', 'utf8', (err, Datas)=>{
    if(Datas){//读取成功就打印出文件中的信息
        console.log(Datas);
    }else{//如果文件读取失败,就打印出错误信息
        console.log('文件读取失败。',err.message)
    }
})

在这里插入图片描述如果我在node目录下执行这段代码呢?
可以看到它打开的是E:\deyun\node\file\test.txt,但是我在node下没有file目录,因此它会报错。
在这里插入图片描述

如何解决路径动态拼接错误的问题

1、提供一个完整的路径

我们将相对路径改为绝对路径,这样就可以保证我们在其他目录下执行代码出现路径错误的问题。
注意:再写绝对路径时我们使用\,第一个\代表转义符。
弊端:这种方式处理路径动态拼接错误的问题虽然可以解决,但是当这段代码换一个保存地址或者换一台电脑运行时,我们还需要重新写读取文件的地址,这样十分的麻烦,不利于维护。

//1.导入文件系统模块![在这里插入图片描述](https://img-blog.csdnimg.cn/2c1a153891ac41b4a071d1a58c7efafc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YWt5Y-26I2Jfg==,size_19,color_FFFFFF,t_70,g_se,x_16)

const fs = require('fs')
//2.调用fs.readFile()方法读取文件
fs.readFile('E:\\deyun\\node\\path\\file\\test.txt', 'utf8', (err, Datas)=>{
    if(Datas){//读取成功就打印出文件中的信息
        console.log(Datas);
    }else{//如果文件读取失败,就打印出错误信息
        console.log('文件读取失败。',err.message)
    }
})

在这里插入图片描述

2、使用__dirname全局变量

__dirname当前模块的目录名。 这与 __filename 的 path.dirname() 相同。

我们打印一下这两个变量看看能打印出什么?

const path = require('path');
console.log(__dirname);
console.log(path.dirname(__filename));

我们在不同的路径下打印它都会打印出相同路径E:\deyun\node\path,它代表的是当前执行的代码所在的路径,因此他会打印出相同的路径。
在这里插入图片描述
由于全局变量__dirname代表当前模块的目录名,我们可以用__dirname来拼接路径。

//1.导入文件系统模块
const fs = require('fs')
//2.调用fs.readFile()方法读取文件
fs.readFile(__dirname+'\\file\\test.txt', 'utf8', (err, Datas)=>{
    if(Datas){//读取成功就打印出文件中的信息
        console.log(Datas);
    }else{//如果文件读取失败,就打印出错误信息
        console.log('文件读取失败。',err.message)
    }
})

通过__dirname来拼接路径,我们在其他路径下也不会出现路径动态拼接错误的问题。
在这里插入图片描述

path路径模块

path 模块提供了用于处理文件和目录的路径的实用工具。 可以使用以下方式导入它:

const path = require('path');

path模块给我们提供了许多处理文件和目录的路径的方法。如路径动态拼接错误的问题就可以使用path中提示的方法解决。

路径拼接path.join()方法

path.join() 方法使用特定于平台的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。

基本语法格式:

 path.join([...paths])

...paths <string> :可选参数,路径片段的序列。
返回值: 返回一个字符串。

零长度的 path 片段被忽略。 如果连接的路径字符串是零长度字符串,则将返回 ‘.’,表示当前工作目录。

通过path方法解决路径拼接问题。

//1.导入文件系统模块
const fs = require('fs')
//导入path模块
const path = require('path');
//2.调用fs.readFile()方法读取文件
//使用path.join()方法拼接路径
fs.readFile(path.join(__dirname,'/file/test.txt'), 'utf8', (err, Datas)=>{
    if(Datas){//读取成功就打印出文件中的信息
        console.log(Datas);
    }else{//如果文件读取失败,就打印出错误信息
        console.log('文件读取失败。',err.message)
    }
})

在这里插入图片描述
注意

在path.join()方法方法中它可以使用相对路径,./代表的当前路径,../它回到上一级目录。

const path = require('path');

console.log(path.join('./a','./b','../c','/d'))

在拼接的路径中有../c那么它会回到a目录下,然后在拼接c。
在这里插入图片描述

获取文件的目录path.dirname()方法

path.dirname() 方法返回 path 的目录名, 尾随的目录分隔符被忽略。

基本语法格式:

path.dirname(path)

path:必选参数,类型为 <string>
返回值: 返回一个路径字符串。

实例

const path  = require('path');

console.log(path.dirname('E:/deyun/node/path/5dirname'))

在这里插入图片描述

获取扩展名path.extname()方法

path.extname() 方法返回 path 的扩展名,即 path 的最后一部分中从最后一次出现的 .(句点)字符到字符串的结尾。

基本语法格式:

path.extname(path)

path:必选参数,表示一个路径字符串。
返回值: 返回一个字符串类型的扩展名。

实例

const path  = require('path');

console.log(path.extname('6extname.js'));
console.log(path.extname('6extname.txt.js'));
console.log(path.extname('6extname'));
console.log(path.extname('6extname.'));

它只返回path最后一部分中最后一个.之后的内容(包含.),否则返回空字符串。
在这里插入图片描述

获取文件名的path.basename()方法

path.basename() 方法返回 path 的最后一部分, 尾随的目录分隔符被忽略。

基本语法格式:

path.basename(path[, ext])

path:必选参数,表示一个路径字符串。
ext :可选的文件扩展名
返回值: 返回一个字符串类型的文件名。

实例

const path  = require('path');

console.log(path.basename('E:/deyun/node/path/7basename.js'));

console.log(path.basename('E:/deyun/node/path/7basename.js', '.html'));

console.log(path.basename('E:/deyun/node/path/7basename.js', '.js'));

console.log(path.basename('E:/deyun/node/path/7basename.JS', '.js'));

如果扩展名错误那么它依旧会返回path 的最后一部分。

Windows 通常以不区分大小写的方式处理文件名(包括文件扩展名),但此函数会区分大小写。 例如,E:/deyun/node/path/7basename.JSE:/deyun/node/path/7basename.js指的是同一个文件,但 basename 将扩展名视为区分大小写的字符串。
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一只合格的前端攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值