探索Node.js中的文件路径操作

发表时间: 2017-07-11 18:09

点击上方蓝字关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

这篇总结的是Node.js中,文件路径操作(这个是后面内容的重要基础),不是文件系统操作(下一篇),所以,前提是先要引入文件路径操作path文件。

var path = require('path')

有关于这些规定死的东西,作为开发者,至少要知道有这些方法,而且知道怎么使用这些方法。所以如果你从头到尾把这篇文章看一遍,那这两个目的你也就达到了。关于文件路径操作,我总结了一下,大概分成9类,(都很简单易懂)下面一个一个来看。

一、查询路径

对于路径,首先,我们要知道怎么怎么查询,然后才是操作,下面是一个例子:

由上图可以看出:

__dirname:指当前文件夹的完整路径。

__filename:指当前文件名的完整路径。

process.cwd():指当前执行node命令时的文件夹的路径。

process.chdir():改变工作目录。

process.execPath:指node执行文件的安装路径。

下面是上面那段代码执行的结果:

个人觉得这里需要注意理解__dirname和process.cwd()的区别。

二、操作路径

有关操作路径,其实就是一个数组的join方法,其次node的path.sep方法,它默认得到路径分隔符。看一个例子:

这个例子的结果是:

理解起来不困难,需要注意的是:path.sep在window下打印的是'\'而不是'/'。同时在window下使用join方法的正确姿势是join('\')。当然,path.sep的用法还可以用来将路径字符串转换成数组。

下面我们顺便看一下path.sep的定义用法。

path.sep方法:将特定文字分隔符'\'或'\'的字符串转换成数组对象。以上面那个字符串为例:

'foo/bar/baz'.split(path.sep)

将会输出一个数组:[ 'foo', 'bar', 'baz' ]

三、环境变量

同样通过一个例子来说明:

上面这个例子中,path.delimiter提供的是具体路径分隔符,';'(windows)':'(其它)。process.env.PATH提供的是环境变量的完整路径。因此,打印出来的结果如下图所示:

四、返回文件扩展名

方法:path.extname

上面代码返回:'.txt'。

五、返回文件名

方法:path.basename

上面代码返回:'baz.txt'。

六、返回父文件的路径

方法:path.dirname

上面代码返回:'/foo/bar'

七、序列化路径

方法:path.normalize

上面代码返回:'/baz'。

当然,实现上面同样功能的,还有path.join():

path.join("/foo/bar", ".././bar", "../..", "/baz")

join这个方法在文章最后会提到。

八、相对路径

方法:path.relative

上面代码返回:'../../baz/biff'

九、其它

除了上面这些,还有一些常用的方法:

1、path.resolve(from,to):将参数to位置的字符解析到一个绝对路径里。

如:console.log(path.resolve('../foo/bar','./baz'))

输出:/foo/bar/baz

2、path.join():将多个参数组合成一个path。

如:console.log(path.join('../foo/bar','./baz'))

输出:../foo/bar/baz

3、path.isAbsolute():判断是否是一个绝对路径。

如:console.log(path.isAbsolute('./foo/bar'),path.isAbsolute('/foo/bar'))

输出:false true

4、path.parse():输出路径信息

如:path.parse('/home/user/dir/file.txt')

输出:{root:'/',dir:'/home/user/dir',base:'file.txt',ext:'.txt',name:'file'}

5、path.format():还原一个完整路径

如:path.format({dir:'/home/user/dir',base:'file.txt'})

输出:/home/user/dir/file.txt

最后总结

还是文章开头的那句话,这些文件操作的方法简单易懂,在node.js官网上也有详细的说明,但这些都是学习node.js其它内容的重要基础,下一篇我来写一下文件系统操作。可以期待一下

以上都是个人理解,如有不对的地方,请留言交流!!!也可以关注,一起学习后面的内容