Načítajte súbor do zoznamu ArrayList

1. Prehľad

V tomto výučbe si povieme niečo o tom rôzne spôsoby načítania súboru do súboru ArrayList.

Existuje mnoho spôsobov, ako čítať súbor v prostredí Java. Po prečítaní súboru môžeme s jeho obsahom vykonať veľa operácií.

Niektoré z týchto operácií, napríklad triedenie, môžu vyžadovať spracovanie celého obsahu súboru do pamäte. Na vykonanie týchto operácií bude pravdepodobne potrebné prečítať súbor ako Pole alebo a Zoznam riadkov alebo slov.

2. Pomocou FileReader

Najzákladnejším spôsobom čítania súboru v Jave je použitie FileReader. Podľa definície, FileReader je trieda pohodlia na čítanie toku znakov z a Súbor.

Existuje niekoľko konštruktorov na inicializáciu a FileReader:

FileReader f = nový FileReader (reťazcová cesta súboru); FileReader f = nový FileReader (súbor f); FileReader f = nový FileReader (FileDescriptor fd);

Všetky tieto konštruktory predpokladajú, že predvolené kódovanie znakov a predvolená veľkosť bajtového medzipamäte sú vhodné.

Ak však chceme poskytnúť vlastné kódovanie znakov a veľkosť bajtovej medzipamäte, môžeme použiť InputStreamReader alebo FileInputStream.

V nasledujúcom kóde si ukážeme, ako čítať riadky zo súboru do formátu ArrayList, použitím FileReader:

Výsledok ArrayList = nový ArrayList (); try (FileReader f = nový FileReader (názov súboru)) {StringBuffer sb = nový StringBuffer (); while (f.ready ()) {char c = (char) f.read (); if (c == '\ n') {result.add (sb.toString ()); sb = nový StringBuffer (); } else {sb.append (c); }} if (sb.length ()> 0) {result.add (sb.toString ()); }} vrátiť výsledok;

3. Používanie BufferedReader

Hoci FileReader je veľmi ľahko použiteľný, je vhodné ho vždy zabaliť BuffereReader, pri čítaní súboru.

To je preto, že BufferedReader používa char buffer na súčasné čítanie viacerých hodnôt z toku vstupných znakov a tým znižuje počet čítať() hovory uskutočnené podkladovým orgánom FileStream.

Konštruktéri pre BufferedReader vziať Čitateľ ako vstup. Ďalej môžeme v konštruktoroch poskytnúť aj veľkosť medzipamäte, ale pre väčšinu prípadov použitia je predvolená veľkosť dostatočne veľká:

BufferedReader br = nový BufferedReader (nový FileReader (názov súboru)); BufferedReader br = nový BufferedReader (nový FileReader (názov súboru), veľkosť);

Okrem zdedených metód z Čitateľ trieda, BufferedReader tiež poskytuje readLine () metóda, prečítať celý riadok ako a Reťazec:

Výsledok ArrayList = nový ArrayList (); try (BufferedReader br = nový BufferedReader (nový FileReader (názov súboru))) {while (br.ready ()) {result.add (br.readLine ()); }} 

4. Používanie Skener

Ďalším bežným spôsobom čítania súborov je služba Skener.

Skener je jednoduchý skener textu, ktorý sa používa na analýzu primitívnych typov a reťazcov pomocou regulárnych výrazov.

Pri čítaní súborov Skener sa inicializuje pomocou Súbor alebo FileReader objekty:

Scanner s = nový Scanner (nový súbor (názov súboru)); Scanner s = nový Scanner (nový FileReader (názov súboru));

Podobný BufferedReader, Scanner poskytuje readLine () metóda na prečítanie celého riadku. Dodatočne, poskytuje tiež a hasNext () metóda označujúca, či je k dispozícii viac hodnôt na čítanie alebo nie:

Výsledok ArrayList = nový ArrayList (); try (Scanner s = new Scanner (new FileReader (filename)))) while while (s.hasNext ()) {result.add (s.nextLine ()); } vrátiť výsledok; }

Skener rozdelí svoj vstup na tokeny pomocou oddeľovača, predvolený oddeľovač je medzery. Tieto tokeny je možné prevádzať na hodnoty rôznych typov pomocou rôznych Ďalšie (nextInt, nextLongatď.) dostupné metódy:

Výsledok ArrayList = nový ArrayList (); try (Scanner s = nový Scanner (nový FileReader (názov súboru))) {while (s.hasNext ()) {result.add (s.nextInt ()); } vrátiť výsledok; }

5. Používanie Files.readAllLines

Pravdepodobne najjednoduchší spôsob, ako prečítať súbor a analyzovať všetky jeho riadky do ArrayList, je použitie readAllLines () metóda dostupná v Súbory trieda:

Výsledok zoznamu = Files.readAllLines (Paths.get (názov súboru));

Táto metóda môže tiež trvať parameter charset, ktorý sa má čítať podľa konkrétneho kódovania znakov:

Charset charset = Charset.forName ("ISO-8859-1"); Výsledok zoznamu = Files.readAllLines (Paths.get (názov súboru), charset);

6. Záver

Aby sme to zhrnuli, diskutovali sme o niekoľkých bežných spôsoboch čítania obsahu a Súbor do ArrayList. Pokryli sme tiež niektoré výhody a nevýhody rôznych metód.

Napríklad môžeme použiť BufferedReader na vyrovnanie znakov kvôli účinnosti. Prípadne môžeme použiť Skener čítať primitívne pomocou oddeľovačov. Alebo by sme mohli jednoducho použiť Files.readAllLines (), bez obáv zo základnej implementácie.

Ako obvykle je kód k dispozícii v našom úložisku GitHub.


$config[zx-auto] not found$config[zx-overlay] not found