Pročitajte datoteku u ArrayList

1. Pregled

U ovom uputstvu ćemo razgovarati različiti načini čitanja datoteke u ArrayList.

Postoji mnogo načina za čitanje datoteke na Javi. Nakon što čitamo datoteku, možemo izvršiti puno operacija na sadržaju te datoteke.

Neke od ovih operacija, poput sortiranja, mogu zahtijevati obradu cjelokupnog sadržaja datoteke u memoriju. Da bismo mogli izvesti takve operacije, možda ćemo trebati datoteku pročitati kao Polje ili a Popis redaka ili riječi.

2. Korištenje Čitač datoteka

Najosnovniji način čitanja datoteke na Javi je korištenje Čitač datoteka. Po definiciji, Čitač datoteka je praktična klasa za čitanje struje znakova iz a Datoteka.

Dostupno je više konstruktora za inicijalizaciju a Čitač datoteka:

FileReader f = novi FileReader (put datoteke do niza); FileReader f = novi FileReader (Datoteka f); FileReader f = novi FileReader (FileDescriptor fd);

Svi ovi konstruktori pretpostavljaju da su zadano kodiranje znakova i zadana veličina bajt-međuspremnika prikladni.

Međutim, ako želimo pružiti prilagođeno kodiranje znakova i veličinu međuspremnika bajtova, možemo koristiti InputStreamReader ili FileInputStream.

U sljedećem kodu pokazat ćemo kako čitati retke iz datoteke u ArrayList, koristeći Čitač datoteka:

Rezultat ArrayList = novi ArrayList (); probajte (FileReader f = novi FileReader (naziv datoteke)) {StringBuffer sb = novi StringBuffer (); while (f.ready ()) {char c = (char) f.read (); if (c == '\ n') {result.add (sb.toString ()); sb = novi StringBuffer (); } else {sb.append (c); }} if (sb.length ()> 0) {result.add (sb.toString ()); }} vratiti rezultat;

3. Korištenje BufferedReader

Iako Čitač datoteka prilično je jednostavan za upotrebu, poželjno ga je uvijek zamotati BuffereReader, prilikom čitanja datoteke.

Ovo je zbog BufferedReader koristi međuspremnik char za istovremeno očitavanje više vrijednosti iz toka unosa znakova a time i smanjuje broj čitati() pozivi upućeni od strane temeljnih FileStream.

Konstruktori za BufferedReader uzeti Čitač kao ulaz. Uz to, u konstruktorima možemo pružiti i veličinu međuspremnika, ali, za većinu slučajeva upotrebe, zadana veličina je dovoljno velika:

BufferedReader br = novi BufferedReader (novi FileReader (naziv datoteke)); BufferedReader br = novi BufferedReader (novi FileReader (naziv datoteke), veličina);

Pored naslijeđenih metoda iz Čitač razred, Također i BufferedReader pruža readLine () metodom, čitati cijeli redak kao a Niz:

Rezultat ArrayList = novi ArrayList (); probajte (BufferedReader br = novi BufferedReader (novi FileReader (naziv datoteke))) {while (br.ready ()) {result.add (br.readLine ()); }} 

4. Korištenje Skener

Drugi uobičajeni način čitanja datoteka je kroz Skener.

Skener je jednostavan skener teksta, koji se koristi za raščlanjivanje primitivnih vrsta i nizova, koristeći regularne izraze.

Kada čitate datoteke, Skener inicijalizira se pomoću Datoteka ili Čitač datoteka objekti:

Skener s = novi skener (nova datoteka (naziv datoteke)); Skener s = novi Skener (novi FileReader (naziv datoteke));

Slično Puferirani čitač, skener pruža readLine () metoda za čitanje cijelog retka. Dodatno, ona također pruža a hasNext () metoda koja pokazuje da li je dostupno više vrijednosti za čitanje ili ne:

Rezultat ArrayList = novi ArrayList (); probajte (Scanner s = novi Scanner (novi FileReader (naziv datoteke))) {while (s.hasNext ()) {result.add (s.nextLine ()); } vratiti rezultat; }

Skener razbija svoj ulaz u tokene pomoću graničnika, zadani graničnik je razmak. Ovi se tokeni mogu pretvoriti u vrijednosti različitih vrsta, pomoću različitih Sljedeći (nextInt, nextLong, itd.) dostupne metode:

Rezultat ArrayList = novi ArrayList (); probajte (Scanner s = novi Scanner (novi FileReader (naziv datoteke))) {while (s.hasNext ()) {result.add (s.nextInt ()); } vratiti rezultat; }

5. Korištenje Files.readAllLines

Vjerojatno najlakši način za čitanje datoteke i raščlanjivanje svih njezinih redaka u ArrayList, je koristiti readAllLines () metoda dostupna u Datoteke razred:

Rezultat popisa = Files.readAllLines (Paths.get (naziv datoteke));

Ova metoda također može uzeti parametar charset da bi se pročitao prema određenom kodiranju znakova:

Charset charset = Charset.forName ("ISO-8859-1"); Rezultat popisa = Files.readAllLines (Paths.get (naziv datoteke), skup znakova);

6. Zaključak

Da rezimiramo, razgovarali smo o nekim uobičajenim načinima čitanja sadržaja a Datoteka u an ArrayList. Također, pokrili smo neke prednosti i nedostatke različitih metoda.

Na primjer, možemo koristiti BufferedReader radi međuspremnika znakova radi efikasnosti. Ili bismo mogli koristiti Skener čitati primitivno pomoću graničnika. Ili bismo možda mogli jednostavno koristiti Files.readAllLines (), bez brige o temeljnoj provedbi.

Kao i obično, kôd je dostupan u našem spremištu GitHub.