0
点赞
收藏
分享

微信扫一扫

同步读取文件

同步读文件

除了标准的异步读取模式外,​​fs​​也提供相应的同步读取函数。同步读取的函数和异步函数相比,多了一个​​Sync​​后缀,并且不接收回调函数,函数直接返回结果。

用​​fs​​模块同步读取一个文本文件的代码如下:

'use strict';

var fs = require('fs');

var data = fs.readFileSync('sample.txt', 'utf-8');
console.log(data);

可见,原异步调用的回调函数的​​data​​被函数直接返回,函数名需要改为​​readFileSync​​,其它参数不变。

如果同步读取文件发生错误,则需要用​​try...catch​​捕获该错误:

try {
var data = fs.readFileSync('sample.txt', 'utf-8');
console.log(data);
} catch (err) {
// 出错了
}

写文件

将数据写入文件是通过​​fs.writeFile()​​实现的:

'use strict';

var fs = require('fs');

var data = 'Hello, Node.js';
fs.writeFile('output.txt', data, function (err) {
if (err) {
console.log(err);
} else {
console.log('ok.');
}
});

​writeFile()​​的参数依次为文件名、数据和回调函数。如果传入的数据是String,默认按UTF-8编码写入文本文件,如果传入的参数是​​Buffer​​,则写入的是二进制文件。回调函数由于只关心成功与否,因此只需要一个​​err​​参数。

和​​readFile()​​类似,​​writeFile()​​也有一个同步方法,叫​​writeFileSync()​​:

'use strict';

var fs = require('fs');

var data = 'Hello, Node.js';
fs.writeFileSync('output.txt', data);

stat

如果我们要获取文件大小,创建时间等信息,可以使用​​fs.stat()​​,它返回一个​​Stat​​对象,能告诉我们文件或目录的详细信息:

'use strict';

var fs = require('fs');

fs.stat('sample.txt', function (err, stat) {
if (err) {
console.log(err);
} else {
// 是否是文件:
console.log('isFile: ' + stat.isFile());
// 是否是目录:
console.log('isDirectory: ' + stat.isDirectory());
if (stat.isFile()) {
// 文件大小:
console.log('size: ' + stat.size);
// 创建时间, Date对象:
console.log('birth time: ' + stat.birthtime);
// 修改时间, Date对象:
console.log('modified time: ' + stat.mtime);
}
}
});

运行结果如下:

isFile: true
isDirectory: false
size: 181
birth time: Fri Dec 11 2015 09:43:41 GMT+0800 (CST)
modified time: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)

​stat()​​也有一个对应的同步函数​​statSync()​​,请试着改写上述异步代码为同步代码。

举报

相关推荐

0 条评论