Á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
Java – Írás fájlba
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.