Nodejs读写文件

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

 

posted @ 2014-09-23 19:47  ference  阅读(437)  评论(0编辑  收藏  举报