Útmutató a Java FileReader osztályhoz
1. Áttekintés
Ahogy a neve is sugallja, FileReader egy Java osztály, amely megkönnyíti a fájl tartalmának olvasását.
Ebben az oktatóanyagban megtanuljuk a Olvasó és hogyan tudjuk használni a FileReader osztály olvasási műveletek elvégzésére egy Java-adatfolyamon.
2. Olvasó Alapok
Ha megnézzük a FileReader osztály, akkor észre fogjuk venni, hogy az osztály minimális kódot tartalmaz a FileReader objektum és nincs más módszer.
Ez olyan kérdéseket vet fel, mint például: „Ki emeli a nehéz emelést az osztály mögött?”
A kérdés megválaszolásához meg kell értenünk a. Fogalmát és hierarchiáját Olvasó osztály Java-ban.
Olvasó egy absztrakt alaposztály, amely lehetővé teszi a karakterek olvasását az egyik konkrét megvalósítása révén. Meghatározza a következő alapvető műveleteket a karakterek olvasására bármilyen adathordozóról, például memóriából vagy fájlrendszerből:
- Olvasson el egyetlen karaktert
- Olvassa el a karakterek tömbjét
- Jelölje meg és állítsa alaphelyzetbe az adott pozíciót egy karakterfolyamban
- Átugrani a pozíciót egy karakterfolyam olvasása közben
- Zárja be a bemeneti adatfolyamot
Természetesen a Olvasó osztálynak meg kell valósítania az összes absztrakt módszert, nevezetesen olvas() és Bezárás(). Sőt, a legtöbb megvalósítás felülír más örökölt módszereket, hogy további funkcionalitást vagy jobb teljesítményt nyújtson.
2.1. Mikor kell használni a FileReader
Most, hogy van némi megértésünk a Olvasó, készen állunk arra, hogy újra összpontosítsunk a FileReader osztály.
FileReader -tól örökli a funkcionalitását InputStreamReader, ami a Olvasó megvalósítás, amelynek célja a bemeneti adatfolyam bájtjainak karakterekként történő olvasása.
Lássuk ezt a hierarchiát az osztálydefiníciókban:
public class InputStreamReader kiterjeszti a Reader-t {} public class FileReader kiterjeszti az InputStreamReader-t {}
Általánosságban használhatunk egy InputStreamReader bármilyen bemeneti forrásból származó karakterek olvasására.
Ha azonban szöveg fájlból történő olvasására van szükség, akkor a InputStreamReader olyan lenne, mintha kardgal vágnánk egy almát. Természetesen a megfelelő eszköz egy kés lenne, pontosan ez FileReader ígéretek.
Tudunk használj FileReader amikor a rendszer alapértelmezett karakterkészletével szeretnénk szöveget olvasni egy fájlból. Bármely egyéb fejlett funkcióhoz ideális a használatához InputStreamReader osztály közvetlenül.
3. Szöveges fájl olvasása a FileReader
Menjünk végig egy kódolási gyakorlatot, amelyen a karakterek olvashatók HelloWorld.txt fájl segítségével a FileReader példa.
3.1. A. Létrehozása FileReader
Kényelmi osztályként FileReader három túlterhelt kivitelezőt kínál amellyel inicializálhatunk egy olvasót, amely bemeneti forrásként képes olvasni egy fájlból.
Vessünk egy pillantást ezekre a kivitelezőkre:
public FileReader (String fájlnév) dobja a FileNotFoundException {super (új FileInputStream (fileName)) parancsot; } public FileReader (Fájl fájl) dobja a FileNotFoundException {super (új FileInputStream (fájl)); } public FileReader (FileDescriptor fd) {super (új FileInputStream (fd)); }
Esetünkben tudjuk a bemeneti fájl fájlnevét. Következésképpen az első konstruktort használhatjuk az olvasó inicializálásához:
FileReader fileReader = új FileReader (elérési út);
3.2. Egyetlen karakter olvasása
Ezután hozzunk létre readAllCharactersOneByOne (), egy módszer a karakterek egyesével történő olvasására a fájlból:
public static String readAllCharactersOneByOne (Reader olvasó) dobja az IOException {StringBuilder content = new StringBuilder (); int nextChar; while ((nextChar = olvasó.olvasott ())! = -1) {content.append ((char) nextChar); } return String.valueOf (tartalom); }
Amint a fenti kódból láthatjuk, megtettük használta aolvas() metódus egy ciklusban a karakterek egyesével történő olvasásához, amíg -1 nem tér vissza, vagyis nincs több olvasandó karakter.
Most teszteljük kódunkat annak ellenőrzésével, hogy a fájlból olvasott szöveg megegyezik-e a várt szöveggel:
@Test public void givenFileReader_whenReadAllCharacters_thenReturnsContent () dobja az IOException {String expectedText = "Hello, World!"; Fájlfájl = új Fájl (FILE_PATH); próbálkozzon (FileReader fileReader = new FileReader (fájl)) {String content = FileReaderExample.readAllCharactersOneByOne (fileReader); Assert.assertEquals (várható szöveg, tartalom); }}
3.3. Karaktertömb olvasása
Akár több karaktert is elolvashatunk egyszerre az örökölt felhasználásával olvasni (char cbuf [], int ki, int len) módszer:
public static String readMultipleCharacters (Reader olvasó, int hossz) dobja az IOException {char [] puffert = new char [length]; int karakterekRead = olvasó.olvasott (puffer, 0, hossz); if (charactersRead! = -1) {return new String (puffer, 0, charactersRead); } else {return ""; }}
A visszatérési értékben finom különbség van olvas() amikor egy tömbben több karaktert kell elolvasni. A a visszatérési érték itt vagy az elolvasott karakterek száma, vagy -1 ha az olvasó elérte a bemeneti adatfolyam végét.
Ezután teszteljük kódunk helyességét:
@Test public void givenFileReader_whenReadMultipleCharacters_thenReturnsContent () dobja az IOException {String várhatóText = "Hello"; File file = új fájl (FILE_PATH); próbáld meg (FileReader fileReader = new FileReader (fájl)) {String content = FileReaderExample.readMultipleCharacters (fileReader, 5); Assert.assertEquals (várható szöveg, tartalom); }}
4. Korlátozások
Láttuk, hogy a FileReader osztály az alapértelmezett rendszerkódolásra támaszkodik.
Tehát a helyzetekhez ahol egyéni értékeket kell használnunk a karakterkészlethez, a puffer méretéhez vagy a bemeneti adatfolyamhoz meg kell tennünk használat InputStreamReader.
Sőt, mindannyian tudjuk, hogy az I / O ciklusok drágák, és késleltetést jelenthetnek alkalmazásunkban. Tehát ez a mi érdekünk minimalizálja az I / O műveletek számát a BufferedReader körülöttünk FileReader tárgy:
BufferedReader in = új BufferedReader (fileReader);
5. Következtetés
Ebben az oktatóanyagban megismertük az a Olvasó és hogyan FileReader néhány példa ellenére egyszerűvé teszi a szöveges fájlok olvasási műveleteinek elvégzését.
Mint mindig, az oktatóanyag teljes forráskódja elérhető a GitHubon.