1 一.直接操作文件
2 最简单的两个fs.readFile和fs.writeFile
3 举例:这个程序的功能是将一个比较大json格式的文件转换成你想自己要格式的文件。
4 var fs = require('fs');
5 fs.readFile('./json.json',function(err,data){
6 if(err) throw err;
7
8 var jsonObj = JSON.parse(data);
9 var space = ' ';
10 var newLine = '\n';
11 var chunks = [];
12 var length = 0;
13
14 for(var i=0,size=jsonObj.length;i<size;i++){
15 var one = jsonObj[i];
16 //what value you want
17 var value1 = one['value1'];
18 var value2 = one['value2'];
19 ....
20 var value = value1 +space+value2+space+.....+newLine;
21 var buffer = new Buffer(value);
22 chunks.push(buffer);
23 length += buffer.length;
24 }
25
26 var resultBuffer = new Buffer(length);
27 for(var i=0,size=chunks.length,pos=0;i<size;i++){
28 chunks[i].copy(resultBuffer,pos);
29 pos += chunks[i].length;
30 }
31
32 fs.writeFile('./resut.text',resultBuffer,function(err){
33 if(err) throw err;
34 console.log('has finished');
35 });
36
37 });
38 它的原理是将文件数据一次性全部读入内存,优点就是接下来都是在内存的操作,速度会很快。但缺点也很明显,就是当文件非常大时,会造成内存溢出。
39 二. 使用文件流
40 2.1 读取文件,api相见:fs.createReadSream 和 fs.createWriterStream
41 以下代码实现的功能就是通过文件流来实现图片的复制:
42 var fs = require('fs');
43 var rOption = {
44 flags : 'r',
45 encoding : null,
46 mode : 0666
47 }
48
49 var wOption = {
50 flags: 'a',
51 encoding: null,
52 mode: 0666
53 }
54
55 var fileReadStream = fs.createReadStream('./myjpg.jpg',rOption);
56 var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg',wOption);
57
58 fileReadStream.on('data',function(data){
59 fileWriteStream.write(data);
60
61 });
62
63 fileReadStream.on('end',function(){
64 console.log('readStream end');
65 fileWriteStream.end();
66 });
67 这里再补充在流中非常有用的一个函数:pipe,它以用来把当前的可读流和另外一个可写流连接起来。可读流中的数据会被自动写入到可写流中。使用起来非常方便,依然实现上例中的功能:
68 var fs = require('fs');
69
70 var fileReadStream = fs.createReadStream('./myjpg.jpg');
71 var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg');
72 fileReadStream.pipe(fileWriteStream);
73
74 fileWriteStream.on('close',function(){
75 console.log('copy over');
76 });
77 用这个函数可以轻松地实现一个静态资源服务器:
78 var http = require("http");
79 var fs = require("fs"),
80 var path = require("path"),
81 var url = require("url");
82
83 var server = http.createServer(function(req, res) {
84 var pathname = url.parse(req.url).pathname;
85 console.log(pathname);
86 var filepath = path.join("./tmp", "wwwroot", pathname);
87 console.log(filepath);
88 var stream = fs.createReadStream(filepath, {flags : "r", encoding : null});
89 stream.on("error", function() {
90 res.writeHead(404);
91 res.end();
92 });
93 stream.pipe(res);
94 });
95 server.on("error", function(error) {
96 console.log(error);
97 });
98 server.listen(8088,function(){
99 console.log('server listen on 8088');
100 });