端くれプログラマの備忘録 C# [C#] テキストファイルを読み込む

[C#] テキストファイルを読み込む

StreamReaderクラス (System.IO) を使うと、テキストファイルを簡単に読み込むことができる。このクラスはTextReaderクラスの派生クラスである。

ファイルの読み込みは、ファイルのオープン、読み込み、クローズの3つの手順から成る。

ファイル全体を一気に読み込む

ReadToEndメソッドを使うと、ファイル全体を一気に読み込むことができる。

エラーが発生すると例外がスローされる。

try
{
    StreamReader reader = new StreamReader(@"C:\Temp\Test.txt",
        Encoding.GetEncoding("Shift_JIS"));
    string text = reader.ReadToEnd();
    reader.Close();

    Console.WriteLine(text);
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

このサンプルでは文字コードがShift-JISのテキストファイルを読み込んでいる。

文字エンコードのデフォルトはUTF-8なので、UTF-8のテキストファイルを読み込む場合にはEncodingの指定は省略可能。誤ったエンコードを指定すると(たとえばエンコードにUTF-8を指定してShift-JISファイルを読み込むような場合)、読み込まれたテキストが文字化けするので注意が必要だ。

オープンしたファイルは必ずクローズする必要がある。usingステートメントを使うと、明示的にクローズする必要は無くなる。

try
{
    using (StreamReader reader = new StreamReader(@"C:\Temp\Test.txt",
        Encoding.GetEncoding("Shift_JIS")))
    {
        string text = reader.ReadToEnd();
        Console.WriteLine(text);
    }
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

ファイルを1行ずつ読み込む

ReadLineメソッドを使うと、ファイルから1行だけ読み込むことができる。

try
{
    StreamReader reader = new StreamReader(@"C:\Temp\Test.txt",
        Encoding.GetEncoding("Shift_JIS"));

    int count = 0;  // line counter
    string line;    // line buffer
    while ((line = reader.ReadLine()) != null) // read one line
    {
        Console.WriteLine(line); // show on screen
        count++; // count up
    }
                
    reader.Close();

    Console.WriteLine("Total lines = {0}", count);
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

“n”、”r”、”rn” の何れかのコードが見つかると行末と認識される。ReadLineメソッドが返す文字列からは行末コードは除去されている。ファイルの末尾に到達すると、ReadLineメソッドはnullを返す。

参考サイト

StreamReader クラス (System.IO)
http://msdn.microsoft.com/ja-jp/library/system.io.streamreader(v=vs.110).aspx