异步读文件

    按照JavaScript的标准,异步读取一个文本文件的代码如下:

    'use strict';



    var fs = require('fs');



    fs.readFile('sample.txt', 'utf-8', function (err, data) {

    if (err) {

    console.log(err);

    } else {

    console.log(data);

    }

    });

    请注意, sample.txt 文件必须在当前目录下,且文件编码为 utf-8

    异步读取时,传入的回调函数接收两个参数,当正常读取时, err 参数为 null data 参数为读取到的String。当读取发生错误时, err 参数代表一个错误对象, data undefined 。这也是Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果。后面我们还会经常编写这种回调函数。

    由于 err 是否为 null 就是判断是否出错的标志,所以通常的判断逻辑总是:

    if (err) {

    // 出错了

    } else {

    // 正常

    }

    如果我们要读取的文件不是文本文件,而是二进制文件,怎么办?

    下面的例子演示了如何读取一个图片文件:

    'use strict';



    var fs = require('fs');



    fs.readFile('sample.png', function (err, data) {

    if (err) {

    console.log(err);

    } else {

    console.log(data);

    console.log(data.length + ' bytes');

    }

    });

    当读取二进制文件时,不传入文件编码时,回调函数的 data 参数将返回一个 Buffer 对象。在Node.js中, Buffer 对象就是一个包含零个或任意个字节的数组(注意和Array不同)。

    Buffer 对象可以和String作转换,例如,把一个 Buffer 对象转换成String:

    // Buffer -> String

    var text = data.toString('utf-8');

    console.log(text);

    或者把一个String转换成 Buffer

    // String -> Buffer

    var buf = new Buffer(text, 'utf-8');

    console.log(buf);