【Path的使用】Node.js中的使用Path模块操作文件路径

😁 作者简介:一名大四的学生,致力学习前端开发技术

⭐️个人主页:夜宵饽饽的主页

❔ 系列专栏:Node.js

👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气

​🔥​前言:

这是有关node.js中的path路径模块的使用,在node中操作文件时候,了解path的API对我们非常有帮助,这是我学习Node的笔记,希望可以帮助到大家,欢迎大家的补充和纠正

文章目录

Path(路径)

1.系统背景

😄 在说node系统模块Path模块之前,我们先来了解一下路径分隔符在不同的操作系统合编程语言的背景会有什么不同

  1. 这是在window系统下的文件路径分隔符反斜杠(\)

    tex 复制代码
    C:\temp\hello.html

    也可以使用正斜杠(/),例如:在命令提示符(Command Prompt)或 PowerShell 中

    tex 复制代码
    C:/Users/Username/Documents/example.txt

    但是,并非所有的 Windows 应用程序都支持正斜杠路径分隔符,建议大家还是使用反斜杠,因为path.setup只添加反斜杠

  2. 这是在Unix(Linux)系统下的文件路径分隔符正斜杆(/)

    tex 复制代码
    C:/temp/world.html

以上是两种不同系统背景下的路径分隔符,接下来我们来了解编程语言背景下的分隔符使用,在js语言中字符串类型存在一种转义符,而且转义符都是以" \ "开始的,因为这种背景下,所以我们想表示正常的反斜杠就需要一些变动了

js语言中使用" ( \ \ )",双反斜杠来表示反斜杠

js 复制代码
const str='C:\\temp\\file.html'
console.log(str)
//C:\temp\file.html

2.path.basename()

概念: 用于返回一个路径的最后一部分,也就是文件名

语法:

js 复制代码
path.basename(path[,ext])

参数:

  • path (必选): 要提取文件名的路径字符串
  • ext (可选): 用于指定要排除的文件扩展名。如果指定了这个参数,那么在返回文件名时将不包括指定的文件扩展名。

例子:

js 复制代码
console.log(path.basename('C:\\temp\\myfile.html'));
//myfile.html

console.log(path.basename('C:\\pemp\\hello.html','.html'))
//hello

3.path.delimiter

概念: 提供特定平台的路径分隔符

  • Windows上是:;
  • 类Unix系统上是::

例子

js 复制代码
//在Windows系统上
//模拟环境变量中的PATH系统变量的值
const PATH="C:\Windows\system32;C:\Windows;C:\Program Files\node"
console.log(PATH.split(path.delimiter))
//[ 'C:Windowssystem32', 'C:Windows', 'C:Program Files\node' ]

4.path.dirname(path)

概念: 返回一个路径的目录名

参数:

  • path:传入的路径,是一个字符串

例子:

js 复制代码
console.log(path.dirname('/foo/bar/baz/li'))
///foo/bar/baz

5.path.extname(path)

概念: 返回路径的扩展名,即从路径的最后一部分中的最后一个.(句号)字符到字符串结束

❗️ 注意

  • 可能路径的最后一部分没有.(句号),你们就返回空字符串
  • 可能路径的第一个字符是 . ,那么也返回空字符串

例子:

js 复制代码
console.log(path.extname('index.html'));
//.html

console.log(path.extname('meta.coffee.md'));
//.md

console.log(path.extname('index'));
//''

console.log(path.extname('index.'));
//.

console.log(path.extname('.index'));
//''

6.path.format(pathObject)

概念: 从一个对象返回一个路径字符串,即是将对象转换为路劲字符串

参数:

  • pathObject
    • dir:包含文件的目录的路劲
    • root:包含路径的根目录路径
    • base:包含文件名的部分
    • ext:包含文件扩展名的部分
    • name:包含文件名但不包含扩展名的部分

⭐️ pathObject 提供的属性有组合时,有些属性的优先级比其他的高:

  • 如果提供了 pathObject.dir,则 pathObject.root 会被忽略
  • 如果提供了 pathObject.base 存在,则 pathObject.extpathObject.name 会被忽略

例子:

js 复制代码
const path=require('path')

//如果提供dir,root和base,则返回`${dir}${path.sep}${base}`
//root会被忽略
const strPath=path.format({
    root:'\ignored',
    dir:'\\home\\user\\dir',
    base:'file.txt'
})

console.log(strPath);
// \home\user\dir\file.txt



//如果没有提供dir 则root会被使用
//如果只提供了 `root` 或 `dir` 等于 `root`,那么生成的路径字符串中不会包含平台特定的路径分隔符。
//ext会被忽略
const strPath2=path.format({
    root:'\\',
    base:'file.txt',
    ext:'\\ignored'
})
//对于以上的例子来说,如果生成的路径包含分隔符先strPath一样,那么结果
// 就会变成双斜杠,例如://file.txt,
console.log(strPath2)
// \file.txt

//如果没有指定base则 name+ext会被使用
const strPath3=path.format({
    root:'\\',
    name:'file',
    ext:'.txt'
})

console.log(strPath3)
// \file.txt

7. path.isAbsolute(path)

概念: 判定路径path是否为一个绝对路径

⭐️ 如果给定的path是一个长度为零的字符串,则返回false

例子:

js 复制代码
path.isAbsolute('C:\\foo\\..'); // true
path.isAbsolute('bar\\baz');    // false

8.path.join([...paths])

概念: 使用平台特定的分隔符把全部给定的path片段连接到一起。并规范化生成的路径

⭐️ 参数:如果任意参数路径不是字符串会报错

例子:

js 复制代码
const path=require('path')

const strPath=path.join('/foo','bar','bas/a','ta')
console.log(strPath);
// \foo\bar\bas\a\ta

9.path.normalize(path)

概念: 规范化给定的路径path,并解析 ...

例子:

js 复制代码
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// 返回: 'C:\\temp\\foo\\'

10.path.parse(path)

概念: 返回一个对象,对象的属性表示路径的path的元素,尾部文件俺分隔符会被忽略,与path.format()方法效果相反

例子:

js 复制代码
const str1='C:\\home\\user\\dir\\hello.md'
console.log(path.parse(str1));

/**
一下的对象的属性于path.format参数是一样的
{
  root: 'C:\\',
  dir: 'C:\\home\\user\\dir',
  base: 'hello.md',
  ext: '.md',
  name: 'hello'
}
**/

11.path.relative(from,to)

概念: 返回从from到to的相对路径(基于当前工作目录)

❗️ 注意:

  • 如果from 到 to 各自解析到同一路径(调用path.resolve()),则返回一个长度为零的字符串
  • 如果from 到 to传入了一个长度为零的字符串,则当前工作目录会被用于代替长度为零的字符串

例子:

js 复制代码
const path=require('path')

console.log(path.relative('C:\\bar\\test\\aa','C:\\bar\\active\\bb'))
//..\..\active\bb

12.path.resolve([...paths])

概念: 把一个路径或者路径片段的序列解析为一个绝对路径

给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径。 例如,给定的路径片段的序列为:/foo/barbaz,则调用 path.resolve('/foo', '/bar', 'baz') 会返回 /bar/baz

❗️ 注意:

  • 如果处理完全部给定的 path 片段后还未生成一个绝对路径,则当前工作目录会被用上
  • 生成的路径是规范化后的,且末尾的斜杠会被删除,除非路径被解析为根目录。
  • 长度为零的 path 片段会被忽略。
  • 如果没有传入 path 片段,则 path.resolve() 会返回当前工作目录的绝对路径。

例子:

js 复制代码
console.log(path.resolve('\\foo\\bar','.\\baz'));
// C:\foo\bar\baz

console.log(path.resolve());
//C:\vs\everday\node_practice

console.log(path.resolve('\\foo\\bar','\\temp\\file\\'));
//C:\temp\file

console.log(path.resolve('com','static_file\\png','..\\gif\\image.gif'));
//C:\vs\everday\node_practice\com\static_file\gif\image.gif

13.path.sep()

概念:提供平台特定的路径片段分隔符

  • Windows上是 \
  • 类Unix系统上是 /

例子:

js 复制代码
console.log('foo\\bar\\baz'.split(path.sep));
//[ 'foo', 'bar', 'baz' ]

⭐️ 在 Windows 上,斜杠字符(/)和反斜杠字符(\)都可作为路径分隔符; 但 path 的方法只添加反斜杠(\)。

相关推荐
栈老师不回家1 小时前
Vue 计算属性和监听器
前端·javascript·vue.js
前端啊龙1 小时前
用vue3封装丶高仿element-plus里面的日期联级选择器,日期选择器
前端·javascript·vue.js
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
小远yyds1 小时前
前端Web用户 token 持久化
开发语言·前端·javascript·vue.js
阿伟来咯~2 小时前
记录学习react的一些内容
javascript·学习·react.js
吕彬-前端2 小时前
使用vite+react+ts+Ant Design开发后台管理项目(五)
前端·javascript·react.js
学前端的小朱2 小时前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
guai_guai_guai2 小时前
uniapp
前端·javascript·vue.js·uni-app
也无晴也无风雨2 小时前
在JS中, 0 == [0] 吗
开发语言·javascript
帅比九日3 小时前
【HarmonyOS Next】封装一个网络请求模块
前端·harmonyos