Ú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.