理解Path对路径进行操作的API
阅读目录
一:理解normalize方法
该方法将非标准路径字符串转换为标准路径字符串,在转换过程中执行如下处理:
1. 解析路径字符串中的 '..' 字符串与 '.' 字符串,返回解析后的标准路径。
2. 将多个斜杠字符串转换为一个斜杠字符串,比如将 '\\' 转换为 '\'。
3. 将windows操作系统中的反斜杠字符串转换为正斜杠字符串。
4. 如果路径字符串以斜杠字符串结尾,则在转换后的完整路径字符串末尾保留该斜杠字符串。
该方法使用如下所示:
path.normalize(path);
在该方法中,使用一个参数path,该参数值为需要被转换的路径字符串。该方法返回被转换后的路径字符串。
下面我们在项目中根目录下建立一个a子目录,在a子目录下新建一个b子目录,然后在b子目录下新建一个message.txt, 内容为:我喜欢编写代码,我们将使用normalize方法解析 './/a//b//d//..//c/e//..//'路径字符串,解析该路径后,并且读取message.txt文件的内容,如下代码:
const fs = require('fs');
const path = require('path');
const myPath = path.normalize('.//a//b//d//../e//..//');
console.log(myPath); // 输出 a/b/
const file = fs.createReadStream(myPath + 'message.txt');
file.on('data', (data) => {
console.log(data.toString()); // 输出 我喜欢编写代码
});
输出如下所示:

二:理解join方法
该方法将多个参数值字符串结合为一个路径字符串,使用方式如下所示:
path.join([path1], [path2], [...]);
在该方法中,使用一个或多个字符串值参数,该方法返回将这些字符串值参数结合而成的路径字符串。
请看如下demo, 在项目的根目录下有 a/b/message.txt, 内容还是为 '我喜欢编写代码', 请看如下代码:
const fs = require('fs');
const path = require('path');
const myPath = path.join(__dirname, 'a', 'b');
console.log(myPath);
const file = fs.createReadStream(myPath + '/message.txt');
file.on('data', (data) => {
console.log(data.toString());
});
输出如下所示:

三:理解dirname方法
该方法用于获取一个路径中的目录名,使用方法如下所示:
path.dirname(p);
该方法使用一个参数,参数值为一个路径,可以是相对路径、绝对路径、也可以为一个目录的路径、也可以是一个文件的路径。
当参数值为目录的路径时:该方法返回该目录的上层目录。
当参数值为文件路径时:该方法返回该文件所在的目录。
请看如下demo:
const path = require('path');
// 指定相对目录路径
const a = path.dirname('./a/b/c/d');
console.log(a); // 输出 ./a/b/c
// 指定相对文件路径
const b = path.dirname('./a/b/c/d/message.txt');
console.log(b); // 输出 ./a/b/c/d
// 指定绝对目录路径
const c = path.dirname('/a/b/c/d');
console.log(c); // 输出 /a/b/c
// 指定绝对文件路径
const d = path.dirname('/a/b/c/d/message.txt');
console.log(d); // 输出 /a/b/c/d
四:理解basename方法
该方法用于获取一个路径中的文件名,使用方式如下所示:
path.basename(p, [ext]);
在该方法中,使用两个参数,p参数为必须的参数,它必须为一个文件的完整路径,可以是相对路径,也可以是一个绝对路径。
ext是可选参数,该参数的作用是在方法返回的文件名中去除该文件的扩展名。请看如下所示的基本代码:
const path = require('path');
// 默认返回文件名 index.html
const a = path.basename('/a/b/c/d/index.html');
console.log(a); // 输出 index.html
// 返回index.html后,去除.html扩展名,因此会返回 index
const b = path.basename('./a/b/c/d/index.html', '.html');
console.log(b); // 输出 index
// 返回index.html后,去除html的扩展名,因此会返回 index.
const c = path.basename('./a/b/c/d/index.html', 'html');
console.log(c); // 输出 index.
// 如果扩展名不存在的话,什么都不去除
const d = path.basename('./a/b/c/d/index.html', 'ejx');
console.log(d); // 输出 index.html
五:理解extname方法
该方法用于获取一个路径中的扩展名,使用方法如下所示:
path.extname(p);
在该方法中,使用一个参数p,参数p必须为一个文件的完整路径,可以为相对路径,也可以为绝对路径,在该参数值中指定文件的扩展名(以'.'开始),当参数值中指定的文件没有指定扩展名时,会返回一个空字符串。
比如如下代码:
const path = require('path');
const a = path.extname('/a/index.html');
console.log(a); // 输出 '.html'
const b = path.extname('/a/index.');
console.log(b); // 输出 '.'
const c = path.extname('/a/index');
console.log(c); // 输出 ''
理解Path对路径进行操作的API的更多相关文章
- python - os.path,路径相关操作
python处理系统路径的相关操作: # -*- coding: utf-8 -*- import os # 属性 print '__file__: %s' % __file__ # 绝对路径(包含文 ...
- Node.js文件系统、路径的操作详解
17173 17173 2 75 2014-12-12T05:06:00Z 2014-12-12T05:06:00Z 21 2735 15595 www.17173.com 129 36 18294 ...
- Node.js文件系统、路径的操作函数
Node.js文件系统.路径的操作函数 目录 Node.js文件系统.路径的操作函数 1.读取文件readFile函数 2.写文件 3.以追加方式写文件 4.打开文件 5.读文件,读取打开的文件内容到 ...
- 深入理解Object提供的阻塞和唤醒API
深入理解Object提供的阻塞和唤醒API 前提 前段时间花了大量时间去研读JUC中同步器AbstractQueuedSynchronizer的源码实现,再结合很久之前看过的一篇关于Object提供的 ...
- (转)AIX下的MPIO、RDAC、SDDPCM多路径软件操作 (AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系)
AIX下的MPIO.RDAC.SDDPCM多路径软件操作 (AIX下的MPIO,查看AIX下hdisk与盘柜卷lun的对应关系) 原文:http://blog.163.com/huangbao_007 ...
- 『与善仁』Appium基础 — 26、常用手机操作的API说明
目录 1.获取当前手机的时间 2.获取手机屏幕的宽和高 3.获取手机当前网络 4.设置手机网络模式 5.操作手机通知栏 6.综合练习 7.发送键到设备(掌握) 8.手机截图(掌握) 是针对手机一些常用 ...
- python路径函操作
#判断是否为文件 os.path.isfile #判断是否为目录 os.path.isdir #返回文件名 os.path.basename(path) #返回文件目录 os.path.d ...
- node.js(四)path优化(路径优化)
1.normalize函数的基本用法 normalize函数将不符合规范的路径经过格式化转换为标准路径,解析路径中的.与..外,还能去掉多余的斜杠. 如下示例: var path = require( ...
- MyEclipse的 lib和Build path(构建路径)(转)
首先两种方式对于放置jar包的方式是不同的: Build path(构建路径):对于种方式来说,可以算是对jar包文件的一个引用.可以引用lib下的jar包,也可以引用本地磁盘上的jar包. WEB- ...
随机推荐
- fllume 入门
flume flume 简介及核心概念 什么是flume Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,目前是Apache的顶级项目.Flume支持 ...
- 转载 基于JAVA每月运势api调用代码实例
代码描述:基于JAVA每月运势api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/58 原文链接:http://outofmemory.cn/code-snip ...
- 【原】Dubbo 多版本号过渡
之前发过一篇因为接口规范的问题导致其它端出现服务不可用的文章(http://www.cnblogs.com/zdd-java/p/8612763.html),然而最近在查阅了dubbo官方指南文档才知 ...
- border-sizing属性详解和应用
box-sizing用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型.它有content-box.border-box和inherit三种取值.inherit指的是从父元素继承box-sizi ...
- js 绘制数学函数
<!-- <!doctype html> --> <html lang="en"> <head> <meta charset= ...
- 【代码笔记】Web-ionic-列表
一,效果图. 二,index.html代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- android一个倾斜的TextView,适用于标签效果
描述: android一个倾斜的TextView,适用于标签效果 应用截图: 使用说明: <com.haozhang.lib.SlantedTextView android:layout_wid ...
- android recovery升级过程中掉电处理
一般在升级过程,都会提示用户,请勿断电,不管是android的STB,TV还是PHONE,或者是其他的终端设备,升级过程,基本上都可以看到“正在升级,请勿断电”,然后有个进度条,显示升级的进度. 但是 ...
- BigDecimal遇到的问题,大伙也说说
一:相除精度丢失的问题 BigDecimal的api除法相对加减乘要实现的复杂多了,只介绍常用的我遇到的问题: 问题:两数相除,如果9/3=3整除没问题,但是10/3=0.33333333...... ...
- JavaScript变量提升的理解
变量提升 先说三句总结性的话: let 的「创建」过程被提升了,但是初始化没有提升. var 的「创建」和「初始化」都被提升了. function 的「创建」「初始化」和「赋值」都被提升了. 所以,我 ...