【C#入門】テキストファイルを読み込む方法(StreamReader)

こんにちは!エンジニアの中沢です。

C#にはファイル読み込むための「StreamReaderクラス」があります。StreamReaderクラスを使えば、テキストファイルを内容をすべて読み込んだり、1行ずつ読み込むことができます。

この記事では、

  • ファイルの読み込みとは
  • 1度にすべての内容を読み込む方法
  • 1行ずつ読み込む方法
  • という基本的な内容から、

  • ファイルが存在しない場合のエラーを回避する方法
  • などの応用的な使い方に関しても解説していきます。

    今回はこれらの方法を覚えるために、ファイルの読み込みのさまざまな使い方をわかりやすく解説します!

    目次

    ファイルの読み込みとは

    ファイルの読み込みには、「StreamReaderクラス」を使います。

    StreamReaderクラスには、ファイルを末尾まで一度に読み込むための「ReadToEndメソッド」や、1行ずつ読み込むための「ReadLineメソッド」が用意されています。

    読み込むファイルが存在しない場合には、例外が発生するので注意してください。

    1度にすべての内容を読み込む方法

    ここでは、1度にすべてのテキストファイルの内容を読み込む方法を解説します。1度にすべてのテキストファイルの内容を読み込むには、「StreamReaderクラス」の「ReadToEndメソッド」を使います。

    StreamReaderクラスの使い方は、コンストラクタの第1引数に読み込むファイルのパスを指定して、第2引数に文字コードを指定します。

    「ReadToEndメソッド」でファイルの読み込みが終わったら、「Closeメソッド」でファイルを閉じる必要があることも忘れないでください。

    テキストファイルを読み込む方法を次のプログラムで確認してみましょう。

    using System;
    using System.IO;
    using System.Text;
    
    namespace Sample
    {
        class Sample
        {
            static void Main()
            {
                StreamReader sr = new StreamReader(@"E:samurai.txt", Encoding.GetEncoding("Shift_JIS"));
    
                string str = sr.ReadToEnd();
    
                sr.Close();
    
                Console.WriteLine(str);
    
                Console.ReadKey();
            }
        }
    }

    実行結果:

    侍
    エンジニア
    塾

    このようにして、テキストファイルの中身を表示することができました。

    1行ずつ読み込む方法

    テキストファイルを1行ずつ読み込むには、「StreamReaderクラス」の「ReadLineメソッド」を使います。

    次のプログラムでは、テキストファイルの読み取りが終わったことを確認するために、「Peekメソッド」を使っています。Peekメソッドは、読み取り対象の文字がある場合には正の整数を返しますが、読み取る文字がない場合には「-1」を返します。

    そのため、Peekメソッドを使って読み取る文字がなくなるまでwhile文で処理を繰り返しています。

    1行ずつ読み込む方法を次のプログラムで確認してみましょう。

    using System;
    using System.IO;
    using System.Text;
    
    namespace Sample
    {
        class Sample
        {
            static void Main()
            {
                StreamReader sr = new StreamReader(@"E:samurai.txt", Encoding.GetEncoding("Shift_JIS"));
    
                while (sr.Peek() != -1)
                {
                    Console.WriteLine(sr.ReadLine());
                }
    
                sr.Close();
    
                Console.ReadKey();
            }
        }
    }

    実行結果:

    侍
    エンジニア
    塾

    このようにして、1行ずつ読み込み表示することができました。

    ファイルが存在しない場合のエラー(例外)を回避する方法

    読み込むファイルが存在しない場合には例外が発生します。例外を回避するためには、事前にファイルの存在確認をする「Existsメソッド」を使う必要があります。

    Existsメソッドを使ってファイルのチェックをしてから読み込む方法を次のプログラムで確認してみましょう。

    using System;
    using System.IO;
    using System.Text;
    
    namespace Sample
    {
        class Sample
        {
            static void Main()
            {
                string filePath = @"E:samurai.txt";
    
                if (File.Exists(filePath))
                {
                    StreamReader sr = new StreamReader(filePath, Encoding.GetEncoding("Shift_JIS"));
    
                    string str = sr.ReadToEnd();
    
                    sr.Close();
    
                    Console.WriteLine(str);
                }
                else
                {
                    Console.WriteLine("ファイルが存在しません");
                }
    
                Console.ReadKey();
            }
        }
    }

    実行結果:

    ファイルが存在しません

    このようにして、ファイルが存在しない場合も正常に終了することができました。

    Existsメソッドの詳しい使い方はこちらの記事で解説しているので、ぜひ確認してください。

    まとめ

    いかがでしたか?

    今回はStreamReaderクラスを使ってファイルを読み込む方法を解説しました。ファイルが存在しない場合には例外が発生するので、Existsメソッドでチェックするなどの注意をしてくださいね。

    もし、ファイルを読み込む方法を忘れてしまったらこの記事を確認してください!

    この記事を書いた人

    【プロフィール】
    DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
    累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
    【専門分野】
    IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

    目次