path 路径模块
在开发基于 Node.js 的应用程序时,处理文件路径是一个常见的需求。为了简化这一过程并避免跨平台兼容性问题,Node.js 提供了 path 模块。该模块提供了一系列实用的方法来解析、格式化和操作文件路径。本文将详细介绍 path 模块的功能及其使用方法,帮助你更高效地管理文件路径。
什么是 path 模块?
基本概念
path 是 Node.js 核心模块之一,它提供了用于处理和转换文件路径的工具函数。无论是构建相对路径还是解析绝对路径,path 模块都能确保你的代码在不同操作系统(如 Windows 和 POSIX)之间保持一致的行为。
模块导入
要使用 path 模块,首先需要通过 require 函数将其导入到你的项目中:
const path = require('path');
核心功能概览
解析路径
path.parse()
此方法可以将一个路径字符串分解为对象,包含目录名、基本名、扩展名等属性。
const parsedPath = path.parse('/home/user/dir/file.txt');
console.log(parsedPath);
// 输出: { root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file' }
path.format()
与 path.parse() 相反,path.format() 可以根据给定的对象重新组合成一个路径字符串。
const formattedPath = path.format({root: '/',dir: '/home/user/dir',base: 'file.txt',ext: '.txt',name: 'file'
});
console.log(formattedPath); // 输出: /home/user/dir/file.txt
构建路径
path.join()
path.join() 方法用于连接多个路径片段,并规范化生成的结果路径。它会自动处理多余的斜杠和其他不规范的情况。
const joinedPath = path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
console.log(joinedPath); // 输出: /foo/bar/baz/asdf
path.resolve()
path.resolve() 类似于 path.join(),但它会从右向左解析路径片段,直到构建出一个绝对路径。如果传入的第一个参数不是绝对路径,则会使用当前工作目录作为起点。
const resolvedPath = path.resolve('/foo/bar', './baz');
console.log(resolvedPath); // 输出: /foo/bar/bazconst relativeResolvedPath = path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
console.log(relativeResolvedPath); // 输出: 当前工作目录/wwwroot/static_files/gif/image.gif
路径标准化
path.normalize()
path.normalize() 方法可以清理路径中的多余部分,比如多余的斜杠或点符号。
const normalizedPath = path.normalize('/foo/bar//baz/asdf/quux/..');
console.log(normalizedPath); // 输出: /foo/bar/baz/asdf
获取路径信息
path.basename()
path.basename() 返回路径的最后一部分,通常是一个文件名。
const basename = path.basename('/foo/bar/baz/asdf/quux.html');
console.log(basename); // 输出: quux.htmlconst basenameWithoutExt = path.basename('/foo/bar/baz/asdf/quux.html', '.html');
console.log(basenameWithoutExt); // 输出: quux
path.dirname()
path.dirname() 返回路径的目录部分。
const dirname = path.dirname('/foo/bar/baz/asdf/quux');
console.log(dirname); // 输出: /foo/bar/baz/asdf
path.extname()
path.extname() 返回路径的扩展名部分。
const extname = path.extname('index.html');
console.log(extname); // 输出: .html
跨平台注意事项
由于不同的操作系统对文件路径有不同的约定(例如,Windows 使用反斜杠 \ 作为路径分隔符,而大多数 Unix 系统使用正斜杠 /),直接硬编码路径分隔符可能会导致兼容性问题。为此,path 模块提供了平台无关的方法来处理路径。
path.sep
path.sep 属性表示当前操作系统的路径分隔符。
console.log(path.sep); // 在 Windows 上输出: \;在 POSIX 上输出: /
path.delimiter
path.delimiter 属性表示当前操作系统的路径分隔符,用于环境变量中的路径列表。
console.log(path.delimiter); // 在 Windows 上输出: ;;在 POSIX 上输出: :
实际应用示例
假设我们需要创建一个简单的脚本,用于读取指定目录下的所有 .json 文件,并打印它们的内容。我们可以利用 fs 和 path 模块来实现这一目标。
const fs = require('fs');
const path = require('path');function readJsonFiles(dir) {fs.readdir(dir, (err, files) => {if (err) throw err;files.forEach(file => {if (path.extname(file) === '.json') {const filePath = path.join(dir, file);fs.readFile(filePath, 'utf8', (err, data) => {if (err) throw err;console.log(`Contents of ${filePath}:`);console.log(JSON.parse(data));});}});});
}readJsonFiles('./data');
结语
感谢您的阅读!如果您对 Node.js 的 path 模块或其他相关话题有任何疑问或见解,欢迎继续探讨。
相关文章:
path 路径模块
在开发基于 Node.js 的应用程序时,处理文件路径是一个常见的需求。为了简化这一过程并避免跨平台兼容性问题,Node.js 提供了 path 模块。该模块提供了一系列实用的方法来解析、格式化和操作文件路径。本文将详细介绍 path 模块的功能及其使用方法&#x…...
SpringBoot中的多环境配置管理
SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置?2. Spring Boot 中如何实现多环境配置?3. 多环境配置的应用场景4. 如何实现配置隔离? Spring B…...
mac下生成.icns图标
笔记原因: 今日需要在mac下开发涉及图标文件的使用及icons文件的生成,所以记录一下。 网络上都是一堆命令行需要打印太麻烦了,写一个一键脚本。 步骤一 将需要生成的png格式文件重命名为“pic.png” mv xxxx.png pic.png 步骤二 下载我…...
关于JS继承的七种方式和理解
1.原型链继承 function Fun1() {this.name parentthis.play [1, 2, 3] } function Fun2() {this.type child }Fun2.prototype new Fun1()let s1 new Fun2() let s2 new Fun2() s1.play.push(4) console.log(s1.play, s2.play) // [1, 2, 3, 4] [1, 2, 3, 4]可以看到两个…...
储能系统-系统架构
已更新系列文章包括104、61850、modbus 、单片机等,欢迎关注 IEC61850实现方案和测试-1-CSDN博客 快速了解104协议-CSDN博客 104调试工具2_104协议调试工具-CSDN博客 1 电池储能系统(BESS) 架构 电池储能系统主要包括、电池、pcs、本地控制…...
AI智算-k8s部署DeepSeek Janus-Pro-7B 多模态大模型
文章目录 简介环境依赖模型下载下载Janus库GPU环境镜像模型manifest调用Janus多模态文生图 简介 DeepSeek Janus Pro 作为一款强大的多模态理解与生成框架,正在成为研究人员和开发者的热门选择。本文将详细介绍如何在云原生k8s环境中部署配置和使用 DeepSeek Janus…...
【截图】selenium自动通过浏览器截取指定元素div的图片
【截图】selenium自动通过浏览器截取指定元素div的图片 思路 截取完整网页截图 通过元素的坐标 截图到指定位置的图片 前提是已经获取到 driver 了 # 定位目标divtarget_div driver.find_element(By.CLASS_NAME, headlines-right)# 获取div的位置和大小location target_div…...
如何导入第三方sdk | 引入第三方jar 包
0. 背景1. 上传私有仓库2. 使用本地文件系统 0. 背景 对接一些第三方功能,会拿到第三方的sdk,也就是jar包,如何导入呢 1. 上传私有仓库 最好的方式就是将第三方jar包,上传到私有的仓库,这样直接正常在pom引用即可如果只…...
HarmonyOS 5.0应用开发——ContentSlot的使用
【高心星出品】 文章目录 ContentSlot的使用使用方法案例运行结果 完整代码 ContentSlot的使用 用于渲染并管理Native层使用C-API创建的组件同时也支持ArkTS创建的NodeContent对象。 支持混合模式开发,当容器是ArkTS组件,子组件在Native侧创建时&#…...
C#常用集合优缺点对比
先上结论: 在C#中,链表、一维数组、字典、List<T>和ArrayList是常见的数据集合类型,它们各有优缺点,适用于不同的场景。以下是它们的比较: 1. 一维数组 (T[]) 优点: 性能高:数组在内存中…...
基于CLIP视觉语言大模型的行人重识别方法的简单框架设计
以下是一个基于CLIP视觉语言大模型的行人重识别方法的简单框架设计,用于数据集测试。我们将使用torch和clip库,假设数据集是一个包含行人图像的文件夹结构,每个子文件夹代表一个行人身份。 步骤概述 安装必要的库加载CLIP模型定义数据集类提…...
RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)
文章目录 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。 这些工具假定系统区域设置为 UTF-8(例如en…...
BurpSuite抓包与HTTP基础
文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…...
SQL Server 数据库迁移到 MySQL 的完整指南
文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…...
【大模型】DeepSeek与chatGPT的区别以及自身的优势
目录 一、前言二、核心技术对比2.1 模型架构设计2.1.1 ChatGPT的Transformer架构2.1.2 DeepSeek的混合架构 2.2 训练数据体系2.2.1 ChatGPT的数据特征2.2.2 DeepSeek的数据策略 三、应用场景对比3.1 通用场景表现3.1.1 ChatGPT的强项领域3.2.2 DeepSeek的专项突破 3.3 响应效率…...
DeepSeek:知识图谱与大模型参数化知识融合的创新架构
引言:AI 领域的融合趋势 在目前大模型与知识图谱作为两个重要的研究方向,各自展现出了强大的能力与潜力。大模型,凭借其在海量数据上的深度训练,拥有强大的语言理解与生成能力,能够处理多种自然语言处理任务࿰…...
ES6 迭代器 (`Iterator`)使用总结
Iterator(迭代器)是 ES6 引入的一种 接口,用于 顺序访问 可迭代对象(Array、Set、Map、String、arguments、自定义对象等)。 Iterator(迭代器)的作用有三个: 为各种数据结构提供一个…...
信用修复和失联修复的区别
失联修复和信用修复是两个不同的概念,在目的、操作方式和应用场景上都有所区别。 失联修复 失联修复主要是指在金融催收行业中,当债务人的联系方式(通常是手机号码)发生改变,导致无法联系到债务人时,催收公…...
2025蓝桥杯JAVA编程题练习Day3
1.黛玉泡茶【算法赛】 问题描述 话说林黛玉闲来无事,打算在潇湘馆摆个茶局,邀上宝钗、探春她们一起品茗赏花。黛玉素来讲究,用的茶杯也各有不同,大的小的,高的矮的,煞是好看。这不,她从柜子里…...
[论文阅读] Knowledge Fusion of Large Language Models
Knowledge Fusion of Large Language Models (FuseLLM) Methodology 整体Pipeline如下图所示 不同的动物代表不同的LLM。左边第一,第二分别是Ensemble以及Weight Merging方法。最右侧为本文提出的FuseLLM。 Ensemble: 融合多个models的预测结果,比如…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
