ファイルストリーム

今回はストリームAPIを使用してファイルの読み書きをしてみましょう。

Readable Stream

今回はfsモジュールとpathモジュールを使用します。

const fs = require('fs');
const path = require('path');

var filePath = path.join(__dirname, 'input.txt');

var readStream = fs.createReadStream(filePath);
readStream.setEncoding('utf8');
readStream.on('data', function (data) {
  console.log(data);
});
readStream.on('end', function() {
  console.log('end');
});
readStream.on('error',function (err) {
  console.log(err);
});

実行すると以下のように出力されます。

$ node inputStream.js 
{ Error: ENOENT: no such file or directory, open 'ファイルパス/input.txt'
    at Error (native)
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: 'ファイルパス/input.txt' }

ファイルが存在しないと言われています。 input.txtを作成し、適当に書いて保存し、もう一度実行します。

$ node inputStream.js 
ここにinput.txtに書いた内容

end

このように出力されれば成功です。

コードの解説をします。

まず、入力対象となるinput.txtのパスを指定します。

__dirnameでスクリプトの存在する絶対パスが取得できます。

path.join(a,b)a/bの形で返してくれます。

var filePath = path.join(__dirname, 'input.txt');

次にfs.createReadSrtream(filePath)でfilePathにあるデータを読み込むストリームを作成します。

さらにsetEncoding('utf-8')で文字エンコードを指定します。

var readStream = fs.createReadStream(filePath);
readStream.setEncoding('utf8');

そしてあらかじめ用意されているイベントを用いてイベントの登録をしていきます。

dataイベントはデータ読み込み時に発火します。

readStream.on('data', function (data) {
  console.log(data);
});

endイベントはデータ読み込み終了時に発火します。

readStream.on('end', function() {
  console.log('end');
});

errorイベントはデータ読み込み時にエラーが発生した場合に発火します。

readStream.on('error',function (err) {
  console.log(err);
});

Writable Stream

const fs = require('fs');
const path = require('path');

var filePath = path.join(__dirname, 'write.txt');
var writeStream = fs.createWriteStream(filePath);

writeStream.write('Hello Write Stream');
writeStream.end();

writeStream.on('close', function() {
  console.log('writable stream closed');
});

writeStream.on('error',function (err) {
  console.log(err);
});

コードの解説をします。

今回は書き込むストリームを使用するのでcreateWriteStream(filePath)で作成します。

var writeStream = fs.createWriteStream(filePath);

次に書き込みたい文字列をストリーム.write('文字列')で書き込みます。

writeStream.write('Hello Write Stream');

そして書き込み終了時にストリームを閉じます。

writeStream.end();

そしてあらかじめ用意されているイベントを用いてイベントの登録をしていきます。

closeイベントはストリームが取られた時に発火します。

writeStream.on('close', function() {
  console.log('writable stream closed');
});

errorイベントはデータ読み込み時にエラーが発生した場合に発火します。

writeStream.on('error',function (err) {
  console.log(err);
});

results matching ""

    No results matching ""