使用Node.js的fs模块操作文件之检查文件是否存在

 2015年10月29日    1123     声明


fs(File System)是Node.js提供的对文件进行操作的模块,它提供了一组UNIX(POSIX)标准的文件操作API本。站曾整理过关于fs模块中常用方法的介绍,本篇详细介绍使用fs模块检查文件是否存在。

对文件进行操作前,一般来说都需要先判断文件是否存在,有时还需要判断文件类型。 在Node.js早期的版本当,提供了fs.exists()方法用于判断文件是否存在。但自V4.0之后,这个方法已不在支持。判断文件是否存在需要借住fs.stat()fs.access()方法。


1. fs.stat()

fs.stat(path, callback)

fs.stat()方法用于查询文件信息,其回调函数中有两个参数(err, stats)stats是一个fs.Stats对象,该对象中包含一个stats.isFile()方法,如果stats对象存在且stats.isFile()true才能确认要修改或删除的文件存在。

var fs = require('fs');

fs.stat('/xxx', function(err, stat){
    if(stat&&stat.isFile()) {
	console.log('文件存在');
    } else {
	console.log('文件不存在或不是标准文件');
    }
});


2. fs.access()

fs.access(path[, mode], callback)

fs.access()用于检查到指定path路径的目录或文件的访问权限。其回调函数中有一个参数(err),如果检查失败则会出现错误参数的响应。mode是要检查的权限掩码,它可以是以下枚举值之一:

  • fs.F_OK - 文件是对于进程是否可见,可以用来检查文件是否存在。也是mode 的默认值
  • fs.R_OK - 文件对于进程是否可读
  • fs.W_OK - 文件对于进程是否可写
  • fs.X_OK - 文件对于进程是否可执行。(Windows系统不可用,执行效果等同fs.F_OK

使用fs.access()方法检查文件是否存在,可以使用以下方法:

var fs = require('fs');

fs.access('/etc/passwd', function(err) {
    console.log(err ? '文件存在' : '文件不存在');
});

使用fs.access()方法检查是否对文件是否有读写权限,可以使用以下方法:

var fs = require('fs');

fs.access('/etc/passwd', fs.R_OK | fs.W_OK, function(err) {
    console.lo(err ? '不可操作!' : '可以读/写');
});


关于fs.stat()fs.access()的同步方法

fs.stat()fs.access()都有对应的同步方法fs.statSync()fs.accessSync()。使用这两个同步方法时当操作成功时返回值和异步方法执行成功相同,但操作失败时会抛出异常,所以使用这两个方法应该注意,个人比较推荐使用异步方法。