Heim > Fragen und Antworten > Hauptteil
"use strict";
var fs = require('fs');
var colors = require('colors/safe');
fs.readdir(process.cwd(), function (err, files) {
files.forEach(function (item, index, array) {
fs.statSync(item, function (err, stat) {
if (stat.isDirectory()) {
console.log(colors.blue(item + '/'));
}
else if (stat.isFile()) {
console.log(colors.green(item));
}
});
});
});
这个程序本来是想打印出当前目录下的文件的,但是如果我把fs.stat换成fs.statSync后,就无法输出了,这是为啥呢? node的版本是v0.12.7
阿神2017-04-17 12:00:13
因为statSync 是同步的方法啊,结果直接得到了 也就是 stat = fs.statSync(item) 然后判断 stat.isDirectory()
阿神2017-04-17 12:00:13
来看一下nodejs的File System模块提供了很多种方法,这些方法大致可以分别为两类:一类是异步+回调的; 一类是同步的。其中stat就是属于前者,statSync就是属于后者。来看一下使用区别:
1.异步版:fs.stat(path,callback):
path是一个表示路径的字符串,callback接收两个参数(err,stats),其中stats就是fs.stats的一个实例;
2.同步版:fs.statSync(path)
只接收一个path变量,fs.statSync(path)其实是一个fs.stats的一个实例;
3.再来看fs.stats有以下方法:
stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isFIFO()
stats.isSocket()
看完这些,你就明白了吧。