日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)javascript|JQuery → Nodejs讀寫文件--直接操作文件代碼教程

      Nodejs讀寫文件--直接操作文件代碼教程

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2012/2/18 23:27:43字體大。A-A+

      作者:西西點(diǎn)擊:3501次評(píng)論:3次標(biāo)簽: Nodejs

      nodejs編輯器V1.02 官網(wǎng)綠色版
      • 類型:文本編輯大。1.8M語言:中文 評(píng)分:5.0
      • 標(biāo)簽:
      立即下載

      nodejs對(duì)文件的讀寫還是相當(dāng)靈活的,可以根據(jù)不同的場(chǎng)景來選擇不同的方法。

           一.直接操作文件

           最簡單的兩個(gè)fs.readFile和fs.writeFile

         舉例:這個(gè)程序的功能是將一個(gè)比較大json格式的文件轉(zhuǎn)換成你想自己要格式的文件。

      var fs = require('fs');
      fs.readFile('./json.json',function(err,data){
          if(err) throw err;
      
          var jsonObj = JSON.parse(data);
          var space = ' ';
          var newLine = '\n';
          var chunks = [];    
          var length = 0;
      
          for(var i=0,size=jsonObj.length;i<size;i++){
              var one = jsonObj[i];
              //what value you want 
              var value1 = one['value1'];
              var value2 = one['value2'];
              ....
              var value = value1 +space+value2+space+.....+newLine;
              var buffer = new Buffer(value);
              chunks.push(buffer);
              length += buffer.length;
          }
          
          var resultBuffer = new Buffer(length);
          for(var i=0,size=chunks.length,pos=0;i<size;i++){
              chunks[i].copy(resultBuffer,pos);
              pos += chunks[i].length;
          }
          
          fs.writeFile('./resut.text',resultBuffer,function(err){
              if(err) throw err;
              console.log('has finished');
          });
          
      });

            它的原理是將文件數(shù)據(jù)一次性全部讀入內(nèi)存,優(yōu)點(diǎn)就是接下來都是在內(nèi)存的操作,速度會(huì)很快。但缺點(diǎn)也很明顯,就是當(dāng)文件非常大時(shí),會(huì)造成內(nèi)存溢出。  

             二. 使用文件流

         2.1 讀取文件,api相見:fs.createReadSream 和 fs.createWriterStream

             以下代碼實(shí)現(xiàn)的功能就是通過文件流來實(shí)現(xiàn)圖片的復(fù)制:

      var fs = require('fs');
      var rOption = {
        flags : 'r',
        encoding : null,
        mode : 0666
      }
      
      var wOption = {
        flags: 'a',
        encoding: null,
        mode: 0666   
      }
      
      var fileReadStream = fs.createReadStream('./myjpg.jpg',rOption);
      var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg',wOption);
      
      fileReadStream.on('data',function(data){
        fileWriteStream.write(data);
          
      });
      
      fileReadStream.on('end',function(){
        console.log('readStream end'); 
        fileWriteStream.end();
      });

             這里再補(bǔ)充在流中非常有用的一個(gè)函數(shù):pipe,它以用來把當(dāng)前的可讀流和另外一個(gè)可寫流連接起來?勺x流中的數(shù)據(jù)會(huì)被自動(dòng)寫入到可寫流中。使用起來非常方便,依然實(shí)現(xiàn)上例中的功能:      

      var fs = require('fs');
      
      var fileReadStream = fs.createReadStream('./myjpg.jpg');
      var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg');
      fileReadStream.pipe(fileWriteStream);
      
      fileWriteStream.on('close',function(){
        console.log('copy over');  
      });

             用這個(gè)函數(shù)可以輕松地實(shí)現(xiàn)一個(gè)靜態(tài)資源服務(wù)器:

      var http = require("http");
      var fs = require("fs"), 
      var path = require("path"), 
      var url = require("url"); 
      
      var server = http.createServer(function(req, res) {
        var pathname = url.parse(req.url).pathname; 
        console.log(pathname);
        var filepath = path.join("./tmp", "wwwroot", pathname); 
        console.log(filepath);
        var stream = fs.createReadStream(filepath, {flags : "r", encoding : null}); 
        stream.on("error", function() { 
            res.writeHead(404); 
            res.end(); 
        }); 
        stream.pipe(res);
      }); 
      server.on("error", function(error) { 
        console.log(error); 
      }); 
      server.listen(8088,function(){
        console.log('server listen on 8088');
      });

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評(píng)論

        最新評(píng)論

        第 1 樓 重慶電信 網(wǎng)友 客人 發(fā)表于: 2015/1/13 19:57:59
        写的太好拉

        支持( 0 ) 蓋樓(回復(fù))

        發(fā)表評(píng)論 查看所有評(píng)論(3)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)