Membaca berkas teks adalah operasi I/O yang paling sering kita tulis: memuat daftar menu, berkas log, atau berkas konfigurasi berformat bebas. Class File menyediakan tiga method pembaca yang terlihat mirip, tetapi punya karakter memori yang berbeda. Memilih method yang tepat membuat program tetap ringan ketika berkasnya membengkak menjadi ratusan megabyte.

Tiga Cara Membaca Teks #

MethodHasilPemakaian memori
File.ReadAllText(path)satu stringseluruh isi dimuat sekaligus
File.ReadAllLines(path)string[] per barisseluruh isi dimuat sekaligus
File.ReadLines(path)IEnumerable<string>baris dibaca satu per satu (lazy)

ReadAllText dan ReadAllLines menampung seluruh isi di memori sebelum kode kita melanjutkan. ReadLines bekerja berbeda: setiap baris baru dihasilkan ketika perulangan benar-benar membutuhkannya, sehingga berkas besar tidak harus berada penuh di memori. Untuk berkas kecil ketiganya sama nyamannya; untuk berkas besar, ReadLines adalah pilihan yang paling aman.

Contoh Membaca Berkas Menu #

Contoh berikut menulis berkas tiga baris, lalu membacanya dengan ketiga method secara bergantian:

csharp
string dir = Path.Combine(Path.GetTempPath(), "verify-6c", "membaca-file-teks");
Directory.CreateDirectory(dir);
string path = Path.Combine(dir, "menu.txt");
File.WriteAllText(path, "Kopi Robusta\nTeh Tarik\nEs Jeruk");

string isi = File.ReadAllText(path);
Console.WriteLine($"ReadAllText -> {isi.Length} karakter");

string[] baris = File.ReadAllLines(path);
foreach (string b in baris)
{
    Console.WriteLine($"ReadAllLines -> {b}");
}

foreach (string b in File.ReadLines(path))
{
    Console.WriteLine($"ReadLines -> {b}");
}

Output yang Dihasilkan:

text
ReadAllText -> 31 karakter
ReadAllLines -> Kopi Robusta
ReadAllLines -> Teh Tarik
ReadAllLines -> Es Jeruk
ReadLines -> Kopi Robusta
ReadLines -> Teh Tarik
ReadLines -> Es Jeruk

Mari kita bedah baris demi baris:

  1. WriteAllText(path, ...): menulis tiga baris dengan karakter \n sebagai pemisah; totalnya 31 karakter.
  2. File.ReadAllText(path): mengembalikan seluruh isi sebagai satu string; Length menghitung karakter, bukan byte di disk.
  3. File.ReadAllLines(path): memecah isi pada setiap pemisah baris menjadi array tiga elemen, lalu foreach pertama mencetaknya.
  4. foreach kedua: mengalirkan baris dari ReadLines satu per satu tanpa menampung array di memori.
  5. Dua perulangan terakhir: hasil cetaknya identik; perbedaan keduanya ada pada cara memori dipakai, bukan pada isi data.