Node.js文件操作详解(2)

以路径“/foo/bar/myfile.txt”为例,如果你想获取父目录(/foo/bar)的所有内容,或者读取同级目录的其它文件,为此,你必须用path.dirname(filePath)获得文件路径的目录部分,比如:

复制代码 代码如下:


                   var path = require('path');

path.dirname('/foo/bar/baz/asdf/quux.txt');

// => /foo/bar/baz/asdf

或者,你想从文件路径里得到文件名,也就是文件路径的最后那一部分,可以使用path.basename函数:
 

复制代码 代码如下:


                    var path = require('path');

path.basename('/foo/bar/baz/asdf/quux.html')

// => quux.html
 

文件路径里可能还包含文件扩展名,通常是文件名中最后一个“.”字符之后的那部分字符串。

path.basename还可以接受一个扩展名字符串作为第二个参数,这样返回的文件名就会自动去掉扩展名,仅仅返回文件的名称部分:

复制代码 代码如下:


                   var path = require('path');

path.basename('/foo/bar/baz/asdf/quux.html', '.html');

// => quux

要想这么做你首先还得知道文件的扩展名,可以用path.extname()来获取扩展名:

复制代码 代码如下:


                   var path = require('path');

path.extname('/a/b/index.html');

// => '.html'

path.extname('/a/b.c/index');

// => ''

path.extname('/a/b.c/.');

// => ''

path.extname('/a/b.c/d.');

// => '.'

检查路径是否存在

目前为止,前面涉及到的路径处理操作都跟底层文件系统无关,只是一些字符串操作。然而,有些时候你需要判断一个文件路径是否存在,比如,你有时候需要判断文件或目录是否存在,如果不存在的话才创建它,可以用path.exsits():

复制代码 代码如下:


                   var path = require('path');

path.exists('/etc/passwd', function(exists) {

console.log('exists:', exists);

// => true

});

path.exists('/does_not_exist', function(exists) {

console.log('exists:', exists);

// => false

});

注意:从Node0.8版本开始,exists从path模块移到了fs模块,变成了fs.exists,除了命名空间不同,其它都没变:

复制代码 代码如下:


                   var fs = require('fs');

fs.exists('/does_not_exist', function(exists) {

console.log('exists:', exists);

// => false

});

path.exists()是个I/O操作,因为它是异步的,因此需要一个回调函数,当I/O操作返回后调用这个回调函数,并把结果传递给它。你还可以使用它的同步版本path.existsSync(),功能完全一样,只是它不会调用回调函数,而是直接返回结果:

复制代码 代码如下:


                  var path = require('path');

path.existsSync('/etc/passwd');

// => true

fs模块介绍

fs模块包含所有文件查询和处理的相关函数,用这些函数,可以查询文件信息,读写和关闭文件。这样导入fs模块:

复制代码 代码如下:


         var fs = require(‘fs')

查询文件信息

有时你可能需要知道文件的大小,创建日期或者权限等文件信息,可以使用fs.stath函数来查询文件或目录的元信息:

复制代码 代码如下:


                   var fs = require('fs');

fs.stat('/etc/passwd', function(err, stats) {

if (err) { throw err;}

console.log(stats);

});

这块代码片断会有类似下面的输出

复制代码 代码如下:


 { dev: 234881026,

ino: 95028917,

mode: 33188,

nlink: 1,

uid: 0,

gid: 0,

rdev: 0,

size: 5086,

blksize: 4096,

blocks: 0,

atime: Fri, 18 Nov 2011 22:44:47 GMT,

mtime: Thu, 08 Sep 2011 23:50:04 GMT,

ctime: Thu, 08 Sep 2011 23:50:04 GMT }

1.fs.stat()调用会将一个stats类的实例作为参数传递给它的回调函数,可以像下面这样使用stats实例:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgspfp.html