Nodejs読み書きファイル
6199 ワード
nodejsはファイルの読み書きに対してかなり柔軟で、異なるシーンによって異なる方法を選択できます.具体的には、Nodejs fsを参照してください.
一.直接操作ファイル
最も簡単なのは2つのfs.readFileとfs.writeFileです.
例えば、このプログラムの機能は、比較的大きいjson形式のファイルを自分の欲しいフォーマットのファイルに変換することです.
二.ファイルフローを使う
2.1ファイルを読み込み、apiを会って:fs.creat ReadSream 和 fs.reate WriterStream
以下のコードで実現される機能は、ファイルフローによる画像のコピーです.
一.直接操作ファイル
最も簡単なのは2つのfs.readFileとfs.writeFileです.
例えば、このプログラムの機能は、比較的大きいjson形式のファイルを自分の欲しいフォーマットのファイルに変換することです.
var fs = require('fs');
fs.readFile('./json.json',function(err,data){
if(err) throw err;
var jsonObj = JSON.parse(data);
var space = ' ';
var newLine = '
';
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');
});
});
その原理はファイルデータを一度に全部メモリに読み込むということです.利点は次のメモリでの操作が速くなります.しかし、欠点もはっきりしています.ファイルが大きいとメモリが溢れてしまいます. 二.ファイルフローを使う
2.1ファイルを読み込み、apiを会って:fs.creat ReadSream 和 fs.reate WriterStream
以下のコードで実現される機能は、ファイルフローによる画像のコピーです.
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();
});
ここでさらに、ストリームにおいて非常に有用な関数を追加する.pipeは、現在の読み取り可能なストリームと他の書き込み可能なストリームとを接続するために使用される.読み取り可能なストリームのデータは、書き込み可能なストリームに自動的に書き込まれます.使用するには非常に便利です.相変わらず上記の機能を実現しています. 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');
});
この関数を使って、静的リソースサーバを簡単に実現できます.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');
});