一. 查看文件信息的方法:

fs.stat() && fs.lstat()

在fs模块中,可以使用fs.stat()方法或fs.lstat()方法查看一个文件或目录的信息,如文件的大小、创建时间、权限等信息。这两个方法的唯一区别是当查看符号链接文件的信息时,必须使用fs.lstat()方法。这两个方法的使用方式如下:

fs.stat(path, callback)
fs.lstat(path, callback)

这两个方法分别有对应的同步方式方法:

fs.statSync(path)
fs.lstatSync(path)

参数说明:

  • path: 被查看的文件或目录的完整路径;
  • callback:查看文件或目录信息操作完毕后执行的回调函数,如function(err, stats) { // 回调函数... }。在该回调函数中使用两个参数,其中err参数为操作失败时返回的错误对象,stats参数值为一个fs.Stats对象。

fs.fstat()

在使用fs.open()fs.openSync()方法打开的文件并返回文件描述符后,可以使用fs.fstat()方法查询被打开文件的文件信息,使用方式如下:

fs.fstat(fd, callback)
fs.fstatSync(fd)

参数说明:

  • fd: 打开文件时返回的文件描述符。

二. fs.Stats对象

fs.Stats对象的方法如下:

(备注: 这些方法中均不使用任何参数)

  • stats.isFile(): 判断被查看对象是否是一个文件。如果是标准文件,返回true。是目录、套接字、符号连接、或设备等返回false。
  • stats. isDirectory(): 判断被查看对象是否是一个目录。如果是目录,返回true。
  • stats. isBlockDevice(): 判断被查看对象是否是一个块设备文件。 如果是块设备,返回true,大多数情况下类UNIX系统的块设备都位于/dev目录下。
  • stats. isCharacterDevice(): 判断被查看对象是否是一个字符设备文件。如果是字符设备,返回true。
  • stats. isSymbolicLink(): 判断被查看对象是否是一个符号链接文件。如果是符号连接,返回true。该方法仅在fs.lstat()方法的回调函数中有效。
  • stats.isFIFO(): 判断被查看对象是否是一个FIFO文件。如果是FIFO,返回true。FIFO是UNIX中的一种特殊类型的命令管道。该方法仅在LINUX系统下有效。
  • stats. isSocket(): 判断被查看对象是否是一个socket文件。 如果是UNIX套接字,返回true。该方法仅在LINUX系统下有效。

fs.Stats对象的属性如下:

  • dev: 文件或目录所在的设备ID。该属性值在UNIX系统下有效;
  • mode: 文件或目录的权限标志,采用数值形式表示;
  • nlink: 文件或目录的的硬连接数量;
  • uid: 文件或目录的所有者的用户ID。该属性值在UNIX系统下有效;
  • gid: 文件或目录的所有者的用户组ID。该属性值在UNIX系统下有效;
  • rdev: 字符设备文件或块设备文件所在设备ID。该属性值在UNIX系统下有效;**
  • ino: 文件或目录的索引编号。该属性值仅在UNIX系统下有效;
  • size: 文件的字节数;
  • atime: 文件或目录的访问时间;
  • mtime: 文件或目录的最后修改时间;
  • ctime: 文件或目录状态的最后修改时间;
  • birthtime: 文件创建时间,文件创建时生成。在一些不提供文件 birthtime 的文件系统中,这个字段会使用 ctime 或 1970-01-01T00:00Z 来填充;

三. 实例:

Node.js程序:

var fs = require('fs');

fs.stat('1.js', function (err, stats) {
    console.log("fs.Stats对象属性:\n");
    console.log(stats);
    console.log("fs.Stats对象方法:\n");

    console.log("isFile: " + stats.isFile());
    console.log("isDirectory: " + stats.isDirectory());
    console.log("isBlockDevice: " + stats.isBlockDevice());
    console.log("isCharacterDevice: " + stats.isCharacterDevice());
    console.log("isFIFO: " + stats.isFIFO());
    console.log("isSocket: " + stats.isSocket());
});

console打印值:

fs.Stats对象属性:
{ dev: -496596946,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 844424930205688,
  size: 198,
  blocks: undefined,
  atime: 2016-07-14T10:08:48.737Z,
  mtime: 2016-07-28T00:30:59.199Z,
  ctime: 2016-07-28T00:30:59.199Z,
  birthtime: 2016-07-14T10:08:48.612Z
}
fs.Stats对象方法:
isFile: true
isDirectory: false
isBlockDevice: false
isCharacterDevice: false
isFIFO: false
isSocket: false

四. 参考:

Node.js的fs模块官方文档:https://nodejs.org/dist/latest-v6.x/docs/api/fs.html

本文作者:子匠_Zijor,转载请注明出处:http://www.dengzhr.com/node-js/841