西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

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

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

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

作者:西西點擊:3501次評論:3次標(biāo)簽: Nodejs

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

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

     一.直接操作文件

     最簡單的兩個fs.readFile和fs.writeFile

   舉例:這個程序的功能是將一個比較大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)點就是接下來都是在內(nèi)存的操作,速度會很快。但缺點也很明顯,就是當(dāng)文件非常大時,會造成內(nèi)存溢出。  

       二. 使用文件流

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

       以下代碼實現(xiàn)的功能就是通過文件流來實現(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();
});

       這里再補充在流中非常有用的一個函數(shù):pipe,它以用來把當(dāng)前的可讀流和另外一個可寫流連接起來?勺x流中的數(shù)據(jù)會被自動寫入到可寫流中。使用起來非常方便,依然實現(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');  
});

       用這個函數(shù)可以輕松地實現(xiàn)一個靜態(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)評論

    閱讀本文后您有什么感想? 已有人給出評價!

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

    熱門評論

    最新評論

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

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

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

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