目录
1.6 path.isAbsolute(path)--判断是否是绝对路径
1.7 path.delimiter()--获取当前操作系统路径分隔符
1.9 path.parse(path)--路径的格式化处理:
1.10 path.format(pathObject)--用于将对象转换成路径
1.11 path.normalize(path)--规范化路径
1.12 path.relative(from, to)--计算相对路径
1.14 path.resolve([...paths])--解析路径
1.1 引言
在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 ../ 开头的相对路径时,很容易出现路径动态拼接错误的问题。因为代码在运行的时候,会以 node 命令时所处的目录,动态拼接出被操作文件的完整路径
于是我们可以用绝对路径来代替相对路径,但是这样做又会出现移植性差、不利于维护的问题
因此我们可以利用 __dirname 来完美解决
示例:
let fs = require("fs");
let path = require("path");
// 拿到需要读取的文件路径 __dirname-表示当前文件所处的目录
let str = path.join(__dirname, "./readMe.txt");
//读取文件
// fs.readFile(__dirname + './readMe.txt', "utf8", function(err, data) { 或
fs.readFile(str, "utf8", function (err, data) {
if (err) {
throw new Error("读取文件失败");
}
console.log(data.toString());
});
1.2 什么是 path 路径模块
path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求
封装了各种路径相关的操作和Buffer一样,NodeJS中的路径也是一个特殊的模块,不同的是Buffer模块已经添加到Global上了, 所以不需要手动导入,而Path模块没有添加到Global上, 所以使用时需要手动导入
path.join():将多个路径片段拼接成一个完整的路径字符串
path.basename():从路径字符串中,将文件名解析出来
path.extname():获取路径的扩展名
path.dirname():
......
使用方式:
const path = require("path");
1.3 path.join() 路径拼接
将多个路径片段拼接成一个完整的路径字符串
语法:path.join([...paths])
示例:
const path = require("path");
// 只有 ../ 会抵消前面的路径
const pathStr = path.join('/a','/b/c','../','./d','e');
console.log(pathStr);
const pathStr2 = path.join(__dirname,'./1.txt');
console.log(pathStr2);
1.3 path.basename()
path.basename():可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名
语法:path.basename(path[,ext]); 返回路径中的最后一部分
path:必选参数,表示一个路径的字符串
ext:可选参数,表示文件扩展名
示例:
const path = require("path");
//定义文件的存放路径
const fpath = '/a/b/c/index.html';
// const fullName = path.basename(fpath);
// console.log(fullName);// index.html
const nameWithoutExt = path.basename(fpath,'.html');
console.log(nameWithoutExt);// index
1.4 path.extname()
获取路径的扩展名
语法:path.extname(path);
示例:
const path = require("path");
const fpath = '/a/b/c/index.html';
const fext = path.extname(fpath);
console.log(fext);// .html
1.5 path.dirname(path)--获取路径
用于获取路径中的目录, 也就是除了最后一个部分以外的内容
// dirname用于获取路径中的目录, 也就是除了最后一个部分以外的内容
// let res = path.dirname('/a/b/c/d/index.html'); // /a/b/c/d
let res = path.dirname('/a/b/c/d'); // /a/b/c
console.log(res);
1.6 path.isAbsolute(path)--判断是否是绝对路径
isAbsolute用于判断路径是否是一个绝对路径
注意点:
区分操作系统
在Linux操作系统中/开头就是绝对路径
在Windows操作系统中盘符开头就是绝对路径
在Linux操作系统中路径的分隔符是左斜杠 /
在Windows操作系统中路径的分隔符是右斜杠 \
// let res = path.isAbsolute('/a/b/c/d/index.html'); // true
// let res = path.isAbsolute('./a/b/c/d/index.html'); // false
// let res = path.isAbsolute('c:\\a\\b\\c\\d\\index.html'); // true
let res = path.isAbsolute('a\\b\\c\\d\\index.html'); // false
console.log(res);
1.7 path.delimiter()--获取当前操作系统路径分隔符
windows是\ Linux是/
// path.delimiter用于获取当前操作系统环境变量的分隔符的
// 如果是在Linux操作系统中运行那么获取到的是 :
// 如果是在Windows操作系统中运行那么获取到的是 ;
console.log(path.delimiter); // ;
1.8 path.sep()--获取当前路径环境变量分隔符
path.sep用于获取当前操作系统中路径的分隔符的
如果是在Linux操作系统中运行那么获取到的是 左斜杠 /
如果是在Windows操作系统中运行那么获取到的是 右斜杠 \
path.sep (windows中使用; linux中使用:)
console.log(path.sep); // \
1.9 path.parse(path)--路径的格式化处理:
path.parse(path): 用于将路径转换成对象
let obj = path.parse("/a/b/c/d/index.html");
console.log(obj);
1.10 path.format(pathObject)--用于将对象转换成路径
let obj = {
root: '/',
dir: '/a/b/c/d',
base: 'index.html',
ext: '.html',
name: 'index'
};
let str = path.format(obj);
console.log(str);
1.11 path.normalize(path)--规范化路径
path.normalize(path): 用于规范化路径
let res = path.normalize("/a//b///cd/index.html");
console.log(res); // \a\b\c\d\index.html
1.12 path.relative(from, to)--计算相对路径
path.relative(from, to): 用于计算相对路径
第一个参数: /data/orandea/test/aaa
第二个参数: /data/orandea/impl/bbb
/**
* /data/orandea/test/aaa --> ../ --> /data/orandea/test
* /data/orandea/test --> ../ --> /data/orandea
* ..\..\impl\bbb
*/
let res = path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
console.log(res); // ..\..\impl\bbb
1.14 path.resolve([...paths])--解析路径
path.resolve([...paths]): 用于解析路径
注意点: 如果后面的参数是绝对路径, 那么前面的参数就会被忽略
// let res = path.resolve('/foo/bar', './baz'); // /foo/bar/baz
// let res = path.resolve('/foo/bar', '../baz'); // /foo/baz
let res = path.resolve('/foo/bar', '/baz'); // /baz
console.log(res);