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 });
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。