はじめに
今回は初学者を対象に、Rubyでファイルを開いて読み込む/書き込む方法、ディレクトリの扱いなどを説明します。
open でファイルを開く
最もシンプルな使い方はKernel#open
メソッドでファイルを開くことです。openはFileクラスのインスタンスを返します。
FileはIOクラスを祖先に持ち、ファイル操作は基本的にIOクラスのインスタンスメソッドを使って行います。またEnumerableモジュールもインクルードされているため、each, map, reduceなどが利用可能です。以下に実例を見ていきます。
行ごとの処理を行うにはIO#each_line
を使うのが簡単です(IO#each
も同じ機能を持つ別名メソッドです)。
openしたファイルは、必ずcloseする必要があります。
また、openにブロックを渡す方法もあります。こうすればファイルオブジェクトはブロック終了時にcloseされるため、close忘れがありません。
ファイルに書き込む
ファイルへの書き込みは、オープンしたFileインスタンスに対してIO#puts
メソッドを使って行います。
エラーが発生してしまいました。「IOError: not opened for writing」と言われている通り、openするときに書き込み可能な形式で開いてやる必要があるのです。これを「モード」と言い、おおまかに以下のような種類があります(module function Kernel.#openより)。
- r
- ファイルを読み込みモードでオープンします。デフォルトはこのモードになっているため、先程は書き込みが失敗していました。
- w
- ファイルを書き込みモードでオープンします。オープン時にファイルがすでに存在していれば その内容を空にします。
- a
- ファイルを書き込みモードでオープンします。出力は常にファイルの末尾に追加されます。
- r+
- 読み書き両用モード。ファイルの読み書き位置は先頭にセットされます。
- w+
- 読み書き両用モード。ファイルの読み書き位置は先頭にセットされ、オープン時にファイルがすでに存在していればその内容を空にします。
- a+
- 読み書き両用モード。書き込みは常にファイル末尾に行われます。
それでは、先ほどのファイルを末尾に追加するa+
モードで開いて、内容を追加してみます。
次のページではディレクトリを扱う方法や、その他のよく利用するメソッドなどを紹介します。