Node.js学习笔记:获取文件信息
一. 查看文件信息的方法:
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