您的位置:首页 > Web前端 > Node.js

Node.js学习笔记(2、File System模块)

2014-01-29 14:53 399 查看
Node.js官方API



filesystem的缩写是fs,该模块提供本地文件的读写能力。

fs.readFile(filename, [options], callback)

filename
String
options
Object

encoding
String | Null default =
null

flag
String default =
'r'


callback
Function

var fs = require('fs');

fs.readFile('./zimin/demo.txt', function (err, logData) {

if (err) throw err;

console.log(data);

});


上面代码使用readFile方法读取文件。readFile方法的第一个参数是文件名,第二个参数是回调函数。这两个参数中间,还可以插入一个可选参数,表示文件的编码。

fs.readFile('./zimin/demo.txt', 'utf8', function (err, logData) {
// ...
});


可用的文件编码包括“ascii”、“utf8”和“base64”。如果这个参数没有提供,默认是utf8。

如果想要同步读取文件,可以使用readFileSync方法。

fs.readFileSync(filename, [options])

var data = fs.readFileSync('./zimin/demo.json');


写入文件要使用writeFile方法。

fs.writeFile(filename, data, [options], callback)

filename
String
data
String | Buffer
options
Object

encoding
String | Null default =
'utf8'

mode
Number default =
438
(aka
0666
in Octal)
flag
String default =
'w'


callback
Function

fs.writeFile('./zimin/demo.txt', data, function (err) {
if (err) {
console.log(err.message);
return;
}
console.log('Saved successfully.');
});


readdir方法用于读取目录,返回一个所包含的文件和子目录的数组。

fs.readdir('./zimin', function (err, files) {
if (err) {
console.log(err);
return;
}
console.log(files);
});


Stream模式

Stream是数据处理的一种形式,可以用来取代回调函数。举例来说,传统形式的文件处理,必须先将文件全部读入内存,然后调用回调函数,如果遇到大文件,整个过程将非常耗时。Stream则是将文件分成小块读入内存,每读入一次,都会触发相应的事件。只要监听这些事件,就能掌握进展,做出相应处理,这样就提高了性能。Node内部的很多IO处理都采用Stream,比如HTTP连接、文件读写、标准输入输出。

Stream既可以读取数据,也可以写入数据。读写数据时,每读入(或写入)一段数据,就会触发一次data事件,全部读取(或写入)完毕,触发end事件。如果发生错误,则触发error事件。

fs模块的createReadStream方法用于新建读取数据流,createWriteStream方法用于新建写入数据流。使用这两个方法,可以做出一个用于文件复制的脚本copy.js。

// copy.js

var fs = require('fs');
console.log(process.argv[2], '->', process.argv[3]);

var readStream = fs.createReadStream(process.argv[2]);
var writeStream = fs.createWriteStream(process.argv[3]);

readStream.on('data', function (chunk) {
writeStream.write(chunk);
});

readStream.on('end', function () {
writeStream.end();
});

readStream.on('error', function (err) {
console.log("ERROR", err);
});

writeStream.on('error', function (err) {
console.log("ERROR", err);
});


上面代码非常容易理解,使用的时候直接提供源文件路径和目标文件路径,就可以了。

node cp.js src.txt dest.txt


Streams对象都具有pipe方法,起到管道作用,将一个数据流输入另一个数据流。所以,上面代码可以重写成下面这样:

var fs = require('fs');
console.log(process.argv[2], '->', process.argv[3]);

var readStream = fs.createReadStream(process.argv[2]);
var writeStream = fs.createWriteStream(process.argv[3]);

readStream.on('open', function () {
readStream.pipe(writeStream);
});

readStream.on('end', function () {
writeStream.end();
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: