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 #
| Method | Hasil | Pemakaian memori |
|---|---|---|
File.ReadAllText(path) | satu string | seluruh isi dimuat sekaligus |
File.ReadAllLines(path) | string[] per baris | seluruh 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:
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:
ReadAllText -> 31 karakter
ReadAllLines -> Kopi Robusta
ReadAllLines -> Teh Tarik
ReadAllLines -> Es Jeruk
ReadLines -> Kopi Robusta
ReadLines -> Teh Tarik
ReadLines -> Es JerukMari kita bedah baris demi baris:
WriteAllText(path, ...): menulis tiga baris dengan karakter\nsebagai pemisah; totalnya 31 karakter.File.ReadAllText(path): mengembalikan seluruh isi sebagai satu string;Lengthmenghitung karakter, bukan byte di disk.File.ReadAllLines(path): memecah isi pada setiap pemisah baris menjadi array tiga elemen, laluforeachpertama mencetaknya.foreachkedua: mengalirkan baris dariReadLinessatu per satu tanpa menampung array di memori.- Dua perulangan terakhir: hasil cetaknya identik; perbedaan keduanya ada pada cara memori dipakai, bukan pada isi data.