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.');
}
});
}
});