← 返回首页
Nodejs基础教程(八)
发表时间:2020-04-22 22:36:36
讲解fs模块

Node.js内置的fs模块就是文件系统模块,负责读写文件。和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法。

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

'use strict';

let fs = require('fs');

//异步读文件(文本文件)
var str = "";
fs.readFile('../data.txt', 'utf-8', function (err, data) {
    if (err) {
        console.log(err);
    } else {
        str = data.toString();
        console.log(str);

        //异步写文件(文本文件),因为是异步写入,必须在成功的回调函数执行
        fs.writeFile('../dest.txt', str, function (err) {
            if (err) {
                console.log(err);
            } else {
                console.log('write success.');
            }
        });
    }
});

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

'use strict';
let fs = require('fs');

let data = fs.readFileSync('../data.txt', 'utf-8');
let str = data.toString();
console.log(str);
fs.writeFileSync('../dest.txt', str);

3.读写二进制文件

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

'use strict';
let fs = require('fs');

//异步读文件(二进制文件)
var buff = "";
fs.readFile('../source.jpg', function (err, data) {
    if (err) {
        console.log(err);
    } else {
        console.log('read success!');
        console.log(data.length + "byte");
        buff = data;
        //异步写文件(二进制文件)
        fs.writeFile('../dest.jpg', buff, function (err) {
            if (err) {
                console.log(err);
            } else {
                console.log('write success.');
            }
        });
    }
});