Olvasson egy fájlt egy ArrayList-be

1. Áttekintés

Ebben az oktatóanyagban megvitatjuk egy fájl fájlba való olvasásának különböző módjai Tömb lista.

A Java-fájlok sokféleképpen olvashatók. Miután elolvastunk egy fájlt, sok műveletet hajthatunk végre a fájl tartalmával.

Ezen műveletek némelyikéhez, például a rendezéshez, szükség lehet a fájl teljes tartalmának memóriába történő feldolgozására. Az ilyen műveletek végrehajtásához előfordulhat, hogy a fájlt el kell olvasnunk Sor vagy a Lista sorokból vagy szavakból.

2. Használata FileReader

A Java-fájlok olvasásának legalapvetőbb módja a FileReader. Definíció szerint, FileReader egy kényelmi osztály a File.

Az inicializálásához több konstruktor áll rendelkezésre FileReader:

FileReader f = új FileReader (karakterlánc filepath); FileReader f = új FileReader (f fájl); FileReader f = új FileReader (FileDescriptor fd);

Mindezek a konstruktorok feltételezik, hogy az alapértelmezett karakterkódolás és az alapértelmezett byte-buffer méret megfelelő.

Ha azonban egyedi karakterkódolást és bájtpuffer méretet akarunk biztosítani, használhatjuk InputStreamReader vagy FileInputStream.

A következő kódban bemutatjuk, hogyan olvassuk el a sorokat egy fájlból egy Tömb lista, felhasználásával FileReader:

ArrayList eredmény = new ArrayList (); próbáld meg (FileReader f = új FileReader (fájlnév)) {StringBuffer sb = új StringBuffer (); while (f.ready ()) {char c = (char) f.read (); if (c == '\ n') {result.add (sb.toString ()); sb = új StringBuffer (); } else {sb.append (c); }} if (sb.length ()> 0) {result.add (sb.toString ()); }} visszatérési eredmény;

3. Használata BufferedReader

Habár FileReader nagyon könnyen használható, célszerű mindig becsomagolni BuffereReader, fájl olvasásakor.

Ez azért van, mert BufferedReader egy char puffert használ egyidejűleg több érték beolvasására egy karakter beviteli adatfolyamból és ennélfogva csökkenti a olvas() az alapul szolgáló hívások FileStream.

Kivitelezők BufferedReader vesz Olvasó bemenetként. Ezenkívül pufferméretet is megadhatunk a konstruktorokban, de a legtöbb használati esetben az alapértelmezett méret elég nagy:

BufferedReader br = new BufferedReader (új FileReader (fájlnév)); BufferedReader br = new BufferedReader (új FileReader (fájlnév), méret);

Az örökölt módszerek mellett a Olvasó osztály, BufferedReader is biztosítja readLine () metódus, egy egész sort a-ként olvasni Húr:

ArrayList eredmény = new ArrayList (); try (BufferedReader br = new BufferedReader (új FileReader (fájlnév))) {while (br.ready ()) {result.add (br.readLine ()); }} 

4. Használata Scanner

A fájlok olvasásának másik gyakori módja a Scanner.

Scanner egy egyszerű szövegolvasó, primitív típusok és karakterláncok elemzésére, reguláris kifejezések használatával.

Fájlok olvasásakor Scanner használatával inicializálják File vagy FileReader tárgyak:

Szkenner s = új Szkenner (új Fájl (fájlnév)); Szkenner s = új Szkenner (új FileReader (fájlnév));

Hasonló BufferedReader, Scanner biztosítja readLine () módszer egy egész sor elolvasására. Továbbá, azt is biztosítja a hasNext () módszer annak jelzésére, hogy több érték áll-e rendelkezésre az olvasáshoz, vagy sem:

ArrayList eredmény = new ArrayList (); try (Szkenner s = új Szkenner (új FileReader (fájlnév)))) {while (s.hasNext ()) {result.add (s.nextLine ()); } visszatérési eredmény; }

Scanner a bemenetet tokenekre bontja egy elválasztó segítségével, az alapértelmezett elválasztó szóköz. Ezek a tokenek különböző típusú értékekké alakíthatók, különféle használatával következő (következőInt, következőHosszústb.) rendelkezésre álló módszerek:

ArrayList eredmény = new ArrayList (); próbáld meg (Szkenner s = új Szkenner (új FileReader (fájlnév))) {while (s.hasNext ()) {result.add (s.nextInt ()); } visszatérési eredmény; }

5. Használata Files.readAllLines

Valószínűleg a legegyszerűbb módja annak, hogy elolvasson egy fájlt, és az összes sorát elemzé elemezze Tömb lista, az a readAllLines () ban elérhető módszer Fájlok osztály:

Lista eredménye = Files.readAllLines (Paths.get (fájlnév));

Ez a módszer egy karakterkészlet paramétert is felvehet, amelyet egy adott karakterkódolásnak megfelelően lehet olvasni:

Charset charset = Charset.forName ("ISO-8859-1"); Lista eredménye = Files.readAllLines (Paths.get (fájlnév), karakterkészlet);

6. Következtetés

Összefoglalva, megvitattunk néhány általános módszert a File egy an Tömb lista. Emellett kitértünk a különféle módszerek néhány előnyére és hátrányára.

Például használhatjuk BufferedReader a puffereket a hatékonyság érdekében. Alternatív megoldásként használhatnánk Scanner hogy primitívet olvasson elválasztók segítségével. Vagy talán egyszerűen használhatnánk Files.readAllLines (), anélkül, hogy aggódna az alapul szolgáló megvalósítás miatt.

Szokás szerint a kód elérhető a GitHub adattárunkban.


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