Fájlok olvasása Java-ban

Áttekintés

Ebben az oktatóanyagban megvizsgáljuk a Java-fájlok olvasásának különböző módjait .

Először megtanuljuk, hogyan kell betölteni egy fájlt az osztályútvonalról, egy URL-ből vagy egy JAR fájlból a szokásos Java osztályok használatával.

Másodszor megtudjuk, hogyan a tartalom elolvasásához a BufferedReader, a Scanner, a StreamTokenizer, a DataInputStream, a SequenceInputStream és a FileChannel használatával. Megbeszéljük az UTF-8 kódolású fájl olvasásának módját is.

Végül megvizsgáljuk a betöltéshez szükséges új technikákat. és olvassa el a Java 7 és Java 8 fájlokat.

Ez a cikk a Baeldung “Java – Vissza az alapokhoz” sorozatának része.

További információ:

Java – Fájl létrehozása

Fájl létrehozása Java-ban a JDK 6, JDK 7 NIO vagy Commons IO használatával.
További információ →

Java – Írás fájlba

Az adatok fájlba történő írása a Java használatával.
További információ →

Beállítás

2.1 Bemeneti fájl

A cikk legtöbb példájában egy olyan szöveget fogunk olvasni, amelynek fájlneve fileTest.txt, amely egy sort tartalmaz:

Néhány példaként egy másik fájlt fogunk használni; ezekben az esetekben kifejezetten megemlítjük a fájlt és annak tartalmát.

2.2 Segítő módszer

Tesztpéldányokat használunk maggal Csak Java osztályok, és a tesztekben állításokat fogunk használni a Hamcrest-egyeztetőkkel.

A tesztek megosztanak egy közös readFromInputStream metódust, amely az InputStream-et String-vé alakítja az eredmények könnyebb érvényesítése érdekében:

Ne feledje, hogy más módon is elérheti ugyanazt az eredményt. Néhány alternatívát megtalálhatunk ebben a cikkben.

Fájl olvasása az osztályútvonalról

3.1 . A Standard Java használata

Ez a szakasz elmagyarázza, hogyan kell elolvasni egy osztályútvonalon elérhető fájlt. Elolvassuk az src / main / resources alatt elérhető “fileTest.txt” fájlt. :

A fenti kódrészletben az aktuális osztályt használtuk egy fájl betöltésére a getResourceAsStream metódussal, és átadtuk a fájl abszolút elérési útját.

Ugyanez a módszer elérhető a egy ClassLoader példány is:

Megkapjuk a classLoa-t Az aktuális osztály der der getClass (). getClassLoader () használatával.

A fő különbség az, hogy amikor a getResourceAsStream-et ClassLoader-példányon használjuk, akkor az elérési utat abszolútként kezeljük az osztályútvonal gyökerétől kezdődően.

Ha egy osztálypéldány ellen használjuk, akkor az elérési út lehet a csomaghoz viszonyított, vagy egy abszolút útvonal, amelyet a vezető perjel utal.

Természetesen vegye figyelembe, hogy a gyakorlatban , a nyitott folyamokat mindig be kell zárni, például a példánkban szereplő InputStream-et: A commons-io könyvtár használata

Egy másik gyakori lehetőség a commons-io csomag FileUtils osztályának használata:

Itt adjuk át a File objektumot a módszer a FileUtils osztály readFileToString (). Ez a segédosztály képes betölteni a tartalmat anélkül, hogy bármilyen kazán kódot kellene írni, hogy létrehozzon egy InputStream példányt és olvasson adatokat.

Ugyanez a könyvtár az IOUtils osztályt is kínálja:

Itt adja át a FileInputStream objektumot az IOUtils osztály metódusának ToString (). Ez a segédosztály ugyanúgy működik, mint az előző, hogy létrehozzon egy InputStream példányt és olvasson adatokat.

Olvasás a BufferedReaderrel

Most hadd ” s egy fájl tartalmának elemzésének különböző módjaira összpontosítunk.

Kezdjük egy egyszerű módszerrel a fájlokból történő olvasásra a BufferedReader használatával:

Vegye figyelembe, hogy a readLine () visszatér null, amikor a fájl végét eléri.

Olvasás fájlból a Java NIO használatával

A JDK7-ben a NIO csomag jelentősen frissült.

Nézzünk meg egy példát a Files osztály és a readAllLines módszer segítségével. A readAllLines metódus elfogadja az elérési utat.

Az elérési út osztály a java.io.File frissítésének tekinthető, néhány további művelettel.

5.1. Kis fájl olvasása

A következő kód bemutatja, hogyan lehet kis fájlokat olvasni az új Files osztály használatával:

Ne feledje, hogy használhatjuk a readAllBytes () módszer, ha bináris adatokra van szükségünk.

5.2. Nagy fájl olvasása

Ha nagy fájlt akarunk olvasni a Files osztályban, használhatjuk a BufferedReader programot.

A következő kód a fájlt használja az új Files osztály és a BufferedReader:

5.3. Fájl olvasása a Files.lines ()

fájlokkal A JDK8 felajánlja a vonalak () metódust a Files osztályon belül. Visszaküldi a String elemek adatfolyamát.

Nézzünk meg egy példát arra, hogyan lehet adatokat bájtba olvasni és dekódolni az UTF-8 karakterkészlet használatával.

A következő kód a fájlt használja az új Files.lines ():

A Stream használatával IO csatornákkal, például a fájlműveletekkel, a bezárást () módszerrel kifejezetten le kell zárnunk.

Amint láthatjuk, a Files API egy másik egyszerű módot kínál a fájl tartalmának String-be olvashatására.

A következő szakaszokban áttekintjük a kevésbé gyakori metódusokat. olyan fájl elolvasása, amely bizonyos helyzetekben megfelelő lehet.

Olvasás a szkennerrel

A következő fájlok egy Szkennert használnak a fájl olvasásához. Itt a szóközöket fogjuk használni elválasztóként:

Ne feledje, hogy az alapértelmezett elválasztó az üres szóköz, de több határoló is használható egy szkennerrel.

A Szkenner osztály hasznos olvasáskor tartalom a konzolról, vagy ha a tartalom primitív értékeket tartalmaz, ismert elválasztóval (pl .: egész számok szóközzel elválasztva).

Olvasás a StreamTokenizerrel

Most olvassunk el egy szöveges fájlt tokenekké a StreamTokenizer használatával.

A tokenizer úgy működik, hogy először kitaláljuk, mi a következő token, karakterlánc vagy szám. Ezt úgy végezzük, hogy megnézzük a tokenizer.ttype mezőt.

Ezután elolvassuk a tényleges tokent az ilyen típus alapján:

  • tokenizer.nval – ha a típus egy szám
  • tokenizer.sval – ha a típus String volt

Ebben a példában egy másik bemeneti fájlt fogunk használni, amely egyszerűen a következőket tartalmazza:

A következő kód beolvassa a fájlból a karakterláncot és a számot is:

Vegye figyelembe, hogy a fájl token végét hogyan használják a végén.

Ez a megközelítés hasznos egy bemeneti adatfolyam tokenekké történő elemzéséhez.

Olvasás a DataInputStream segítségével

A DataInputStream segítségével bináris vagy primitív adattípusok egy fájlból.

A következő teszt beolvassa a fájlt a DataInputStream segítségével:

Olvasás a FileChannellel

Ha nagy fájlt olvas, a FileChannel gyorsabb lehet, mint a szokásos IO.

A következő kód a FileChannel és a RandomAccessFile segítségével olvassa el az adat bájtjait a fájlból:

UTF-8 kódolás olvasása szerkesztett fájl

Most nézzük meg, hogyan olvasható el egy UTF-8 kódolású fájl a BufferedReader segítségével. Ebben a példában egy kínai karaktereket tartalmazó fájlt fogunk olvasni:

Tartalom olvasása URL-ből

A tartalom URL-ből történő olvasásához a “/” URL a példánkban:

Az URL-hez való csatlakozásnak vannak alternatív módjai is. Itt a normál SDK-ban elérhető URL-t és URLConnection osztályt használtuk.

Fájl olvasása JAR-ból

Egy fájl belsejében található fájl olvasásához JAR fájl, szükségünk lesz egy JAR-ra, amelyben egy fájl található. Példánkhoz a “LICENSE.txt” fájlt olvassuk a “hamcrest-library-1.3.jar” fájlból:

Ide szeretnénk betölteni a LICENSE.txt fájlt, amely a Hamcrest könyvtárban található, ezért a a Matcher osztálya, amely segít az erőforrások megszerzésében. Ugyanaz a fájl betölthető az classloader segítségével is.

Következtetés

Mint láthatjuk, Számos lehetőség van egy fájl betöltésére és az adatok leolvasására abból a sima Java használatával.

Fájlokat különböző helyekről tölthetünk be, például classpath, URL vagy jar fájlokból.

Ezután a BufferedReader segítségével soronként olvashat, a szkennerrel különféle elválasztókkal olvashatunk, a StreamTokenizer segítségével fájlokat olvashatunk tokenekké, DataInputStream segítségével bináris adatokat és primitív adattípusokat olvashatunk, a SequenceInput Stream segítségével több fájlt kapcsolhatunk össze egy patakba, a FileChannel pedig gyorsabban olvashat nagyokból fájlok stb.

Write a Comment

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük