StreamReaderクラスを使ってテキストファイルからデータを読み込む [C#]

System.IO名前空間にあるStreamReaderクラスを使用することで、テキストファイルのデータを読み込むことができます。
ここでは、StreamReaderクラスを使ってテキストファイルのデータを読み込む方法を紹介します。

本記事のサンプルコードを実行するには、以下の名前空間のusingが必要になります。

StreamReaderクラスでテキストを読み込む

StreamReaderクラスにはテキストファイルからデータを読み込むためのメソッドがいくつか用意されています。
以下に主なメソッドを記載します。

メソッド 説明
ReadToEnd ストリームのすべての文字(ストリームの現在位置から末尾までの文字)を読み込みます。
ReadToEndAsync 非同期でストリームのすべての文字を読み込みます。
ReadLine ストリームから1行分の文字列を読み込みます。
ReadLineAsync 非同期でストリームから1行分の文字列を読み込みます。

すべての文字列データを読み込む

テキストファイルのすべてのデータを読み込むにはReadToEndメソッドを使用します。
以下にテキストファイルからデータを読み込む簡単な例を示します。
ここでは、C:\TextフォルダーにあるSample.txtファイルから文字列データを読み込んでいます。

StreamReaderクラスのReadToEndメソッドでファイルから文字列データを読み込むために、コンストラクタの引数にファイルパスを指定して、StreamReaderオブジェクトのインスタンスを生成します。
ReadToEndメソッドは指定したパスのテキストファイルのデータを読み込みstring(文字列)を返します。
上記の例ではReadToEndメソッドの引数は指定していません。引数を指定せずにReadToEndメソッドを呼び出すと、ReadToEndメソッドは文字エンコーディングにUTF-8を使用して、テキストファイルのデータを読み込みます。

StreamReaderオブジェクトでは、文字列データを読み込んだ後に、Closeメソッドを呼び出してストリームを閉じます。
Closeメソッドを呼び出すことで、関連付けられたすべてのシステムリソースが解放されます。

文字エンコーディングを指定して読み込む

StreamReaderクラスには文字列データを読み込む際の文字エンコーディングを指定することができます。
以下に文字エンコーディングにShift-JISを指定して、テキストファイルからデータを読み込む例を示します。

文字エンコーディングを指定する際は、StreamReaderクラスのコンストラクタの引数に指定します。
StreamReaderクラスの各メソッドは指定された文字エンコーディングに従って文字列データを読み込みます。
文字エンコーディングの指定例をいくつか記載しておきます。

Closeについて

StreamReaderクラスを使用した後はCloseメソッドでストリームを閉じるようにしますが、usingステートメントを使用することで、Closeメソッドを呼び出さずにシステムリソースを開放することができます。
以下にusingステートメントを使用したコード例を示します。

1行ずつ読み込む

ここまではStreamReaderクラスのReadToEndメソッドで、指定したテキストファイルのすべてのデータを一気に読み込んでいましたが。StreamReaderクラスには、1行ずつ文字列データを読み込むメソッドも用意されています。
テキストファイルから1行ずつデータを読み込むにはReadLineメソッドを使用します。
以下にReadLineメソッドでテキストファイルのデータを1行ずつ読み込むサンプルコードを示します。

ReadLineメソッドで1行ずつ文字列データを読み込む時は、StreamReaderクラスのPeekメソッドを使って読み取り対象の文字が存在するかどうかを確認しながら処理していきます。Peekメソッドは読み取り対象の文字がない場合に-1を返します。
上記の例ではPeekメソッドの戻り値が0以上である間、ReadLineメソッドで1行の文字列データを読み取っています。

非同期で読み込む

StreamReaderクラスには非同期で文字列データを読み込むメソッドが用意されています。
ここまでサンプルで示してきたReadToEndメソッド、ReadLineメソッドにも対応する非同期読込用メソッドが用意されています。
以下にReadToEndメソッドに対応する非同期実行用のReadToEndAsyncメソッドを使用して、非同期でテキストファイルのデータを読み込むサンプルコードを示します。

上記の例ではコンソールに「Before」が出力された後「After」が出力され、その後にテキストファイルから読み込んだデータが出力されます。

テキストファイル

StreamReaderクラスで読み取るサンプルファイル

実行結果

StreamReaderクラステキスト読み取りコンソールサンプルアプリケーション実行結果

StreamReaderオブジェクトの生成

StreamReaderオブジェクトのインスタンスは、FileInfoクラスのOpenTextメソッド、またはFileクラスのOpenText静的メソッドで生成することもできます。
FileInfoクラスのOpenTextメソッド、またはFileクラスのOpenText静的メソッドで生成したStreamReaderオブジェクトの文字エンコーディングはUTF-8になります。