同步读取文件

简介: 同步读取文件

同步读文件


除了标准的异步读取模式外,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(),请试着改写上述异步代码为同步代码。


相关文章
|
10月前
|
Go
文件写入、追加、读取、复制不是问题
文件写入、追加、读取、复制不是问题
87 0
|
10月前
|
C++
C++程序对数据文件的操作与文件流
C++程序对数据文件的操作与文件流
72 0
|
10月前
|
Linux Windows
写入文件
写入文件。
49 2
|
10月前
|
C语言 C++
C/C++文件读取操作
C/C++文件读取操作
|
10月前
|
C++ iOS开发
61对数据文件的操作与文件流
61对数据文件的操作与文件流
47 0
|
XML C# 数据格式
C#读取写入文件的三种方式
最近对文件的操作比较频繁。这里记录一下常用的几种文件读写的方式。 我这里使用窗体来做测试,例子在文末,可下载。
110 0
从文件1中读取数据,修改数据的内容,然后存入文件2中,再从文件2中把数据读取出来显示在屏幕上
从文件1中读取数据,修改数据的内容,然后存入文件2中,再从文件2中把数据读取出来显示在屏幕上
175 0
|
编译器 C++ iOS开发
C++文件操作解析及使用(读、写文件 使用文件指针)
C++文件操作解析及使用(读、写文件 使用文件指针)
299 0
C++文件操作解析及使用(读、写文件 使用文件指针)
|
Java
字节流写数据加异常处理、字节流读数据、复制文本文件及复制图片
字节流写数据加异常处理、字节流读数据、复制文本文件及复制图片的简单示例
137 0
|
Java
I/O流常用复制和读写文件
I/O流常用复制和读写文件
134 0