StreamReaderクラス (System.IO) を使うと、テキストファイルを簡単に読み込むことができる。このクラスはTextReaderクラスの派生クラスである。
ファイルの読み込みは、ファイルのオープン、読み込み、クローズの3つの手順から成る。
ファイル全体を一気に読み込む
ReadToEndメソッドを使うと、ファイル全体を一気に読み込むことができる。
エラーが発生すると例外がスローされる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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ステートメントを使うと、明示的にクローズする必要は無くなる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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行だけ読み込むことができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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