路径path模块
相对路径问题
在读取文件时,写相对路径容易出现以下问题:
假设有如下两个文件,它们所处的目录及文件名如下所示:
file/js/fs.js
file/js/text.txt
fs.js代码的作用是读出text.txt中的内容,并显示出来。
const fs = require('fs');
fs.readfilesync("./text.txt",'utf8');
// 这里对text.txt的访问,使用的是相对"fs.js" 本身的路径
现在,运行fs.js这个文件有两种方式:
- 如果终端中的路径定位在
js
目录下,则通过node fs.js
- 如果终端中的路径定位在
file
目录下,则通过:node js/fs.js
,此时就不能正确找到文件了。 - 原因是:在fs中读取文件时,使用的是相对路径,而相对路径的参考点是运行这个js文件的小黑窗的路径。而这个路径是可以通过cd命名来调整的。
- 解决方法:在操作文件时,使用绝对路径来定位文件。
__dirname 和 __filename 获取绝对路径
绝对路径:从磁盘根目录开始到指定文件的路径。
相对路径:是以某个文件的位置为起点,相对于这个位置来找另一个文件。
node.js中提供了两个全局变量来获取绝对路径:
- __dirname:获取当前被执行的文件的文件夹所处的绝对路径。
- __filename:获取当前被执行的文件的绝对路径。
path模块常用方法
path模块是一个核心模块,用来处理路径问题:拼接,分析,取后缀名。
- path.basename(路径) 获取返回 path 的最后一部分(文件名)
- path.join() (常用)拼接路径
- path.parse(path) 转成一个对象
path.basename('/foo/bar/baz/asdf/quux.html'); // 返回: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html'); // 返回: 'quux'
path.dirname('/foo/bar/baz/asdf/quux'); // 返回: '/foo/bar/baz/asdf'
path.extname('index.html'); // 返回: '.html'
path模块其它方法列表
方法 | 作用 |
---|---|
path.basename(path[, ext]) | 获取返回 path 的最后一部分(文件名) |
path.dirname(path) | 返回目录名 |
path.extname(path) | 返回路径中文件的扩展名(包含.) |
path.format(pathObject) | 将一个对象格式化为一个路径字符串 |
path.join([…paths]) | 拼接路径 |
path.parse(path) | 把路径字符串解析成对象的格式 |
path.resolve([…paths]) | 基于当前工作目录拼接路径 |