文件的I/O是由标准POSIX函数封装而成。需要使用require(‘fs’)访问这个模块。所有的方法都提供了异步和同步两种方式。
异步形式下,方法的最后一个参数需要传入一个执行完成时的回调函数。传给回调函数的参数取决于具体的异步方法,但第一个参数总是保留给异常对象。如果操作成功,那么该异常对象就变为null或者undefined。
这里是一个异步调用的例子:
var fs = require(‘fs‘);
fs.unlink(‘/tmp/hello‘, function (err) {
if (err) throw err;
console.log(‘successfully deleted /tmp/hello‘);
});
这里是进行相同操作的同步调用的例子:
var fs = require(‘fs‘);
fs.unlinkSync(‘/tmp/hello‘)
console.log(‘successfully deleted /tmp/hello‘);
由于异步方法调用无法保证执行的顺序,所以下面的代码容易导致出现错误。
fs.rename(‘/tmp/hello‘, ‘/tmp/world‘, function (err) {
if (err) throw err;
console.log(‘renamed complete‘);
});
fs.stat(‘/tmp/world‘, function (err, stats) {
if (err) throw err;
console.log(‘stats: ‘ + JSON.stringify(stats));
});
这样做有可能导致fs.stat在fs.rename之前执行,正确的做法是链式调用回调函数。
fs.rename(‘/tmp/hello‘, ‘/tmp/world‘, function (err) {
if (err) throw err;
fs.stat(‘/tmp/world‘, function (err, stats) {
if (err) throw err;
console.log(‘stats: ‘ + JSON.stringify(stats));
});
});
当需要频繁操作时,强烈建议使用异步方法。同步方式在其完成之前将会阻塞当前的整个进程,即搁置所有连接。
fs.rename(path1, path2, [callback])
异步调用rename(2),重命名某个文件,除非回调函数执行过程出现了异常,否则不会传递任何参数。
fs.renameSync(path1, path2)
同步调用重命名rename(2),重命名某个文件。
fs.truncate(fd, len, [callback])
异步调用ftruncate(2),截断某个文件,除非回调函数执行过程出现了异常,否则不会传递任何参数。
fs.truncateSync(fd, len)
同步调用重命名ftruncate(2),截断某个文件s。
fs.chmod(path, mode, [callback])
异步调用chmod(2),修改文件权限,除非回调函数执行过程出现了异常,否则不会传递任何参数。
fs.chmodSync(path, mode)
同步调用chmod(2),修改文件权限。
fs.stat(path, [callback])
异步调用stat(2),读取文件元信息,回调函数将返回两个参数(err, stats),其中stats是fs.Stats的一个对象,如下所示:
{ dev: 2049,
ino: 305352,
mode: 16877,
nlink: 12,
uid: 1000,
gid: 1000,
rdev: 0,
size: 4096,
blksize: 4096,
blocks: 8,
atime: ‘2009-06-29T11:11:55Z‘,
mtime: ‘2009-06-29T11:11:40Z‘,
ctime: ‘2009-06-29T11:11:40Z‘
}