Panduan untuk Kelas FileReader Java

1. Ikhtisar

Seperti namanya, FileReader adalah kelas Java yang memudahkan untuk membaca konten file .

Dalam tutorial ini, kita akan mempelajari konsep dasar Reader dan bagaimana kita bisa menggunakan kelas FileReader untuk melakukan operasi baca pada aliran karakter di Java.

2. Dasar-dasar Pembaca

Jika kita melihat kode kelas FileReader , maka kita akan melihat bahwa kelas tersebut berisi kode minimal untuk membuat objek FileReader dan tidak ada metode lain.

Hal ini menimbulkan pertanyaan seperti "Siapa yang mengerjakan tugas berat di belakang kelas ini?"

Untuk menjawab pertanyaan ini, kita harus memahami konsep dan hierarki kelas Reader di Java.

Reader adalah kelas dasar abstrak yang memungkinkan membaca karakter melalui salah satu implementasi konkretnya. Ini mendefinisikan operasi dasar berikut untuk membaca karakter dari media apa pun seperti memori atau sistem file:

  • Baca satu karakter
  • Baca larik karakter
  • Tandai dan setel ulang posisi tertentu dalam aliran karakter
  • Lewati posisi saat membaca aliran karakter
  • Tutup aliran input

Secara alami, semua implementasi kelas Reader harus mengimplementasikan semua metode abstrak, yaitu read () dan close () . Selain itu, sebagian besar implementasi juga mengganti metode warisan lainnya untuk memberikan fungsionalitas tambahan atau kinerja yang lebih baik.

2.1. Kapan Menggunakan FileReader

Sekarang setelah kita memahami tentang Pembaca , kita siap untuk mengembalikan fokus kita ke kelas FileReader .

FileReader mewarisi fungsinya dari InputStreamReader , yang merupakan implementasi Reader yang dirancang untuk membaca byte dari aliran input sebagai karakter.

Mari kita lihat hierarki ini dalam definisi kelas:

public class InputStreamReader extends Reader {} public class FileReader extends InputStreamReader {}

Secara umum, kita dapat menggunakan InputStreamReader untuk membaca karakter dari sumber input apa pun.

Namun, ketika membaca teks dari file, menggunakan InputStreamReader sama seperti memotong apel dengan pedang. Tentu saja, alat yang tepat adalah pisau, itulah yang dijanjikan FileReader .

Kita dapat menggunakan FileReader saat kita ingin membaca teks dari file menggunakan set karakter default sistem. Untuk fungsionalitas tingkat lanjut lainnya, ini akan ideal untuk menggunakan kelas InputStreamReader secara langsung.

3. Membaca File Teks dengan FileReader

Mari kita ikuti latihan coding membaca karakter dari file HelloWorld.txt menggunakan instance FileReader .

3.1. Membuat FileReader

Sebagai kelas praktis, FileReader menawarkan tiga konstruktor kelebihan beban yang dapat digunakan untuk menginisialisasi pembaca yang dapat membaca dari file sebagai sumber input.

Mari kita lihat konstruktor ini:

public FileReader(String fileName) throws FileNotFoundException { super(new FileInputStream(fileName)); } public FileReader(File file) throws FileNotFoundException { super(new FileInputStream(file)); } public FileReader(FileDescriptor fd) { super(new FileInputStream(fd)); }

Dalam kasus kami, kami tahu nama file dari file input. Akibatnya, kita dapat menggunakan konstruktor pertama untuk menginisialisasi pembaca:

FileReader fileReader = new FileReader(path);

3.2. Membaca Karakter Tunggal

Selanjutnya, mari buat readAllCharactersOneByOne () , metode untuk membaca karakter dari file satu per satu:

public static String readAllCharactersOneByOne(Reader reader) throws IOException { StringBuilder content = new StringBuilder(); int nextChar; while ((nextChar = reader.read()) != -1) { content.append((char) nextChar); } return String.valueOf(content); }

Seperti yang dapat kita lihat dari kode di atas, kita telah menggunakan metode read () dalam satu putaran untuk membaca karakter satu per satu hingga mengembalikan -1 , yang berarti tidak ada lagi karakter untuk dibaca.

Sekarang, mari kita uji kode kita dengan memvalidasi bahwa teks yang dibaca dari file cocok dengan teks yang diharapkan:

@Test public void givenFileReader_whenReadAllCharacters_thenReturnsContent() throws IOException { String expectedText = "Hello, World!"; File file = new File(FILE_PATH); try (FileReader fileReader = new FileReader(file)) { String content = FileReaderExample.readAllCharactersOneByOne(fileReader); Assert.assertEquals(expectedText, content); } }

3.3. Membaca Array of Characters

Kita bahkan dapat membaca beberapa karakter sekaligus menggunakan metode baca (char cbuf [], int off, int len) yang diwariskan :

public static String readMultipleCharacters(Reader reader, int length) throws IOException { char[] buffer = new char[length]; int charactersRead = reader.read(buffer, 0, length); if (charactersRead != -1) { return new String(buffer, 0, charactersRead); } else { return ""; } }

Ada perbedaan halus dalam nilai kembalian read () saat membaca beberapa karakter dalam sebuah array. Nilai yang dikembalikan di sini adalah jumlah karakter yang dibaca atau -1 jika pembaca telah mencapai akhir aliran input.

Selanjutnya, mari kita uji kebenaran kode kita:

@Test public void givenFileReader_whenReadMultipleCharacters_thenReturnsContent() throws IOException { String expectedText = "Hello"; File file = new File(FILE_PATH); try (FileReader fileReader = new FileReader(file)) { String content = FileReaderExample.readMultipleCharacters(fileReader, 5); Assert.assertEquals(expectedText, content); } }

4. Batasan

Kami telah melihat bahwa kelas FileReader bergantung pada pengkodean karakter sistem default.

Jadi, untuk situasi, di mana kita perlu menggunakan nilai khusus untuk set karakter, ukuran buffer, atau aliran input, kita harus menggunakan InputStreamReader .

Selain itu, kita semua tahu bahwa siklus I / O mahal dan dapat menyebabkan latensi pada aplikasi kita. Jadi, demi kepentingan terbaik kami untuk meminimalkan jumlah operasi I / O dengan membungkus BufferedReader di sekitar objek FileReader kami :

BufferedReader in = new BufferedReader(fileReader);

5. Kesimpulan

Dalam tutorial ini, kita belajar tentang konsep dasar Pembaca dan bagaimana FileReader membuatnya mudah untuk melakukan operasi baca pada file teks melalui beberapa contoh.

Seperti biasa, kode sumber lengkap untuk tutorial tersedia di GitHub.