Membaca File ke dalam ArrayList

1. Ikhtisar

Dalam tutorial ini, kita akan membahas berbagai cara membaca file ke dalam ArrayList .

Ada banyak cara untuk membaca file di Java. Setelah kami membaca file, kami dapat melakukan banyak operasi pada konten file itu.

Beberapa operasi ini, seperti pengurutan, mungkin memerlukan pemrosesan seluruh konten file ke dalam memori. Untuk melakukan operasi seperti itu, kita mungkin perlu membaca file sebagai Array atau Daftar baris atau kata.

2. Menggunakan FileReader

Cara paling dasar untuk membaca file di Java menggunakan FileReader . Menurut definisi, FileReader adalah kelas praktis untuk membaca aliran karakter dari File.

Ada beberapa konstruktor yang tersedia untuk menginisialisasi FileReader:

FileReader f = new FileReader(String filepath); FileReader f = new FileReader(File f); FileReader f = new FileReader(FileDescriptor fd);

Semua konstruktor ini mengasumsikan bahwa pengkodean karakter default dan ukuran buffer-byte default sudah sesuai.

Namun, jika kita ingin menyediakan pengkodean karakter khusus dan ukuran buffering byte, kita dapat menggunakan InputStreamReader atau FileInputStream .

Dalam kode berikut, kami akan menunjukkan cara membaca baris dari file ke dalam ArrayList, menggunakan FileReader:

ArrayList result = new ArrayList(); try (FileReader f = new FileReader(filename)) { StringBuffer sb = new StringBuffer(); while (f.ready()) { char c = (char) f.read(); if (c == '\n') { result.add(sb.toString()); sb = new StringBuffer(); } else { sb.append(c); } } if (sb.length() > 0) { result.add(sb.toString()); } } return result;

3. Menggunakan BufferedReader

Meskipun FileReader cukup mudah digunakan, disarankan untuk selalu membungkusnya dengan BuffereReader , saat membaca file.

Ini karena BufferedReader menggunakan buffer karakter untuk membaca beberapa nilai secara bersamaan dari aliran input karakter dan karenanya mengurangi jumlah panggilan read () yang dibuat oleh FileStream yang mendasarinya .

Konstruktor untuk BufferedReader menggunakan Reader sebagai input. Selain itu, kami juga dapat menyediakan ukuran buffer di konstruktor, tetapi, untuk sebagian besar kasus penggunaan, ukuran defaultnya cukup besar:

BufferedReader br = new BufferedReader(new FileReader(filename)); BufferedReader br = new BufferedReader(new FileReader(filename), size);

Selain metode yang diwariskan dari kelas Reader , BufferedReader juga menyediakan metode readLine () , untuk membaca seluruh baris sebagai String:

ArrayList result = new ArrayList(); try (BufferedReader br = new BufferedReader(new FileReader(filename))) { while (br.ready()) { result.add(br.readLine()); } } 

4. Menggunakan Scanner

Cara umum lainnya untuk membaca file adalah melalui Scanner .

Pemindai adalah pemindai teks sederhana, digunakan untuk mengurai jenis dan string primitif, menggunakan ekspresi reguler.

Saat membaca file, Pemindai diinisialisasi menggunakan objek File atau FileReader :

Scanner s = new Scanner(new File(filename)); Scanner s = new Scanner(new FileReader(filename));

Mirip dengan BufferedReader, Scanner menyediakan metode readLine () untuk membaca seluruh baris . Selain itu , ini juga menyediakan metode hasNext () untuk menunjukkan apakah lebih banyak nilai tersedia untuk dibaca atau tidak:

ArrayList result = new ArrayList(); try (Scanner s = new Scanner(new FileReader(filename))) { while (s.hasNext()) { result.add(s.nextLine()); } return result; }

Pemindai memecah masukannya menjadi token menggunakan pembatas, pembatas default adalah spasi. Token ini dapat diubah menjadi nilai dari berbagai jenis, dengan menggunakan berbagai metode next ( nextInt , nextLong , dll) yang tersedia:

ArrayList result = new ArrayList(); try (Scanner s = new Scanner(new FileReader(filename))) { while (s.hasNext()) { result.add(s.nextInt()); } return result; }

5. Menggunakan Files.readAllLines

Mungkin cara termudah untuk membaca file, dan mengurai semua barisnya menjadi ArrayList , adalah dengan menggunakan metode readAllLines () yang tersedia di kelas Files :

List result = Files.readAllLines(Paths.get(filename));

Metode ini juga dapat mengambil parameter charset, untuk dibaca sesuai dengan pengkodean karakter tertentu:

Charset charset = Charset.forName("ISO-8859-1"); List result = Files.readAllLines(Paths.get(filename), charset);

6. Kesimpulan

Untuk meringkas, kami membahas beberapa cara umum membaca konten File ke dalam ArrayList . Juga, kami membahas beberapa keuntungan dan kerugian dari berbagai metode.

Misalnya, kita dapat menggunakan BufferedReader sebagai buffer karakter untuk efisiensi. Alternatifnya, kita bisa menggunakan Scanner untuk membaca primitif menggunakan pembatas. Atau mungkin, kita cukup menggunakan Files.readAllLines (), tanpa mengkhawatirkan implementasi yang mendasarinya.

Seperti biasa, kode tersedia di repositori GitHub kami.