ファイルストリーム
今回はストリーム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);
});