Help us understand the problem. What is going on with this article?

Node.jsを使ったやっつけのファイル操作

概要

Node.jsを使って「こまけぇこたぁいいんだよ」マインドでファイル操作を実装した。

2019/12/13追記

事実を誤認させると感じたのでタイトルを変更

  • 変更前「Node.jsを使った簡単なファイル操作」
  • 変更後「Node.jsを使ったやっつけのファイル操作」

2018/08/07追記

以下のように記述の誤りの指摘があったので主にサンプルコードの記述を修正しています。
今「node fs」で検索するとこの記事めちゃくちゃ上に来るんですね!びっくりした!
まだ記述がおかしいところもあると思うので気づいてくれた方はコメントで指摘していただけると幸いです。

公式モジュールfs

Node.jsには公式モジュールのfsがあるのでそれを使用する。
File System | Node.js v7.4.0 Documentation

ドキュメントにてメソッドを確認するとわかる通り、通常メソッドと、Syncメソッドが存在している。
メソッドの実行は基本的に非同期で行われるため、例えばファイルの存在チェックを行なった場合、fs.statを用いると「ファイルが存在しているのにエラーが返る」ことがある。
今回は速度とか「こまけぇこたぁいいんだよ」マインドでfs.statSyncなどの同期実行メソッドを使っていく。

とりあえずvar fs = require('fs');するのを忘れないように。

ファイルの存在確認

ファイルの存在確認にはfs.statSyncを用いる。
ファイルが存在しないとエラーになるのでtryしてcatchしてあげよう。

function check(filePath) {
  var isExist = false;
  try {
    fs.statSync(filePath);
    isExist = true;
  } catch(err) {
    isExist = false;
  }
  return isExist;
}

ファイルの中身を読む

ファイルの中身を読むにはfs.readFileSyncを用いる。
先に実装した存在チェックを用いているが、try/catchで十分な気もする。

function read(filePath) {
  var content = new String();
  if(check(filePath)) {;
    content = fs.readFileSync(filePath, 'utf8');
  }
  return content;
};

ファイルに書き込む

ファイルに書き込むにはfs.writeFileSyncを用いる。
ファイルが存在しない場合はファイル作成からやってくれる。
このメソッドを使う場合、ファイルの内容を丸々書き換えてしまうので注意が必要。
追記にはfs.appendFileSyncとか使うといいのかもしれない。知らんけど。

function write(filePath, stream) {
  var result = false;
  try {
    fs.writeFileSync(filePath, stream);
    return true;
  } catch(err) {
    return false;
  }
}

ファイルを削除する

ファイルを削除する場合はfs.unlinkSyncを用いる。
rmとかmvとかdeleteとかじゃないんだー。

追記(2019/06/20): deleteが予約語で使えないという指摘をいただいたので修正します

function deleteFile(filePath){
  var result = false;
  try {
    fs.unlinkSync(filePath);
    return true;
  } catch(err) {
    return false;
  }
}

テストケース

テストコードは次のように書くとスムーズ

  • ファイルが存在しないことをcheck
  • ファイルにwrite
  • ファイルが存在することをcheck
  • ファイルをread
  • ファイルをdelete
  • ファイルが存在しないことをcheck

まとめ

あくまで動かすサービス(で合ってる?)は1こだけ、というミニマルなシステムの中で動かすこと前提で書いたコード。
同時に複数起動する場合、ファイルアクセスの監視(fs.watchとか)とかファイル編集のロックとかも実装しなきゃいけないし、それに伴ってdurationの設定とかもしなきゃいけないから注意してほしい。

参考

Node.jsでファイルに書き込むサンプル - 感謝のプログラミング 10000時間
fs.statSyncでファイルの存在判定 - Qiita
nodejsでファイルを削除する - みんなのちからになりたい

wifeofvillon
孫請けSIer→フリーランスコーダー→QAバイト
drivemode
No-look freedom for driving.
http://drivemode.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした