[C#] テキストファイルの読み込み方法 [StreamReader]

C#

この記事では、StreamReaderを使ったテキストファイルの読み込み方法を解説します。

この記事はこんな人におすすめ!
犬

C#でテキストファイルを読み込みたい!

猫

ファイルを1行ずつ読み込みたい!

鳩

読もうとしたファイルが無かったらどうしたらいいの!?

 

ファイル読み込みの基本や気をつけるべき点をサンプルとともにわかりやすく解説しています!

 

概要

C#でテキストファイルを読み込む際は、StreamReaderクラスを使います。

StreamReaderクラスは、ファイルからテキストを読み込むためのクラスです。
ファイルの全体を一気に取得することも、1行ずつ取得することもできます。

 

サンプル&詳細解説

読み込むテキストファイルの作成

まず、サンプルで読み込むためのテキストファイルを用意しましょう。
名前は、「test.txt」としています。ファイルの中身は以下のとおりです。

・test.txtの中身

Dog
Cat
Monkey
Bird

全4行のテキストデータです。
サンプルではこのようにしていますが、もちろん内容はなんでも構いません。

そして、作成したファイルはCドライブ直下の「TEST」フォルダに保存しています。

 

1行ずつ読み込む

以下のサンプルでは、ファイルを1行ずつ読み込んで行ごとにコンソール出力しています。

サンプルコード

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string path = @"C:\TEST\test.txt";

            // ファイルの存在確認
            if (File.Exists(path))
            {
                using (StreamReader sr = new StreamReader(path))
                {
                    string line;
                    // 1行ずつ読み込み。ファイル末尾まで繰り返す
                    while ((line = sr.ReadLine()) != null)
                    {
                        // 読み込んだ行を出力
                        Console.WriteLine(line);
                    }
                }
            }
            else
            {
                Console.WriteLine("ファイルが存在しません");
            }

            Console.ReadKey();
        }
    }
}

実行結果

Dog
Cat
Monkey
Bird

テキストファイルの内容がそのまま出力されましたね。

それでは、上記サンプルの重要箇所を解説していきます。

  • パスの指定(7行目)
    先ほど作成した「test.txt」を絶対パスで指定しています。 
    絶対パスとは、ファイルやフォルダの完全な場所を表すパスのことです。Windowsの場合、C:\やD:\といったドライブ名から始まるのが絶対パスです。
     
  • ファイルの存在確認(10行目)
    File.Existsメソッドでパスのファイルが存在してるか確認しています。
    存在していたらそのまま読み込み処理に、存在しなかったらエラーメッセージを出力します。
    この処理を入れておかないと、StreamReaderで読み込むファイルが無かった時に「FileNotFoundException」の例外エラーが発生します。
     
  • usingステートメント(12行目)
    usingステートメント内でStreamReaderを宣言しています。
    本来、StreamReaderは処理が終わったら必ずCloseメソッドDisposeメソッドでリソースを開放する必要がありますが、usingステートメントを使えばusingを抜ける際に自動的にリソースを開放してれます。
    usingを使えば、例外が発生した場合などにも自動的にリソースを開放してくれるので安全です。
     
  • ファイルを1行ずつ読み込み(16行目)
    ReadLineメソッドで1行ずつファイルを読み込んでいます。
    ファイルを全て読み終わったらReadLineはnullを返すので、それまで処理を繰り返すようにしています。
     

一括で読み込む

以下のサンプルでは、ファイルを一括で読み込んで一つのstring型に代入しています。

サンプルコード

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string path = @"C:\TEST\test.txt";

            // ファイルの存在確認
            if (File.Exists(path))
            {
                using (StreamReader sr = new StreamReader(path))
                {
                    // ファイルの末尾まで読み込み
                    string content = sr.ReadToEnd();
                    // 読み込んだ文字列を出力
                    Console.WriteLine(content);
                }
            }
            else
            {
                Console.WriteLine("ファイルが存在しません");
            }

            Console.ReadKey();
        }
    }
}

実行結果

Dog
Cat
Monkey
Bird

1行ずつ読み込んだ時と同様に、ファイルの内容がそのまま出力されました。

1行ずつ読み込む処理と同じ箇所を除くと、重要なのはReadToEndメソッド(15行目)です。
このメソッドを使うと、ストリームの現在位置(今回の場合は先頭)から末尾までを全て読み込みます。
一気にファイルの全てを読み込むので、大きなサイズのファイルには向きません

 

まとめ

以下は当記事のまとめです!

  • C#でテキストファイルを読み込む際はStreamReaderクラスを使用する。
  • 1行ずつ読むときはReadLineメソッドを、全て読むときはReadToEndメソッドを使う。
  • File.Existsメソッドを使うとファイルの存在を確認できる。
  • usingステートメントを使うとリソースが自動的に開放される。

 

以上です!

今回紹介しましたサンプルを元に、ファイル読み込みを色々試してみてください!

コメント

タイトルとURLをコピーしました