Fájl olvasása Groovy-ban

1. Áttekintés

Ebben a gyors bemutatóban a fájl Groovy-ban történő olvasásának különböző módjait tárjuk fel.

A Groovy kényelmes módszereket kínál a fájlok kezelésére. A következőkre fogunk koncentrálni File osztály, amely rendelkezik néhány segítő módszerrel a fájlok olvasásához.

Fedezzük fel őket egyenként a következő szakaszokban.

2. Olvasás a File Vonalról vonalra

Számos Groovy IO módszer létezik, például readLine és minden sor elérhető fájlok soronkénti olvasására.

2.1. Használata File.withReader

Kezdjük a File.Olvasóval módszer. Újat hoz létre BufferedReader a takarók alatt, amelyekkel a tartalmat elolvashatjuk a readLine módszer.

Például olvassunk egy fájlt soronként, és nyomtassunk ki minden sort. Visszaadjuk a sorok számát is:

int readFileLineByLine (String filePath) {File file = új File (filePath) def sor, noOfLines = 0; file.withReader {olvasó -> while ((line = olvasó.readLine ())! = null) {println "$ {line}" noOfLines ++}} return noOfLines}

Hozzunk létre egy egyszerű szöveges fájlt fileContent.txt a következő tartalommal és használja a teszteléshez:

1. sor: Hello World !!! 2. sor: Ez egy fájl tartalma. 3. sor: Karaktersorozat tartalma

Próbáljuk ki hasznossági módszerünket:

def 'Visszaküldendő sorok száma a megadott fájlPath fájlban' () {megadott: def fájlPath = "src / main / resources / fileContent.txt" amikor: def noOfLines = readFile.readFileLineByLine (filePath), akkor: noOfLines noOfLines egérösszeg állítja noOfLines , 3} 

A withReader A metódus olyan karakterkészlet-paraméterrel is használható, mint az UTF-8 vagy az ASCII a kódolt fájlok olvasására. Lássunk egy példát:

új fájl ("src / main / resources / utf8Content.html"). withReader ('UTF-8') {olvasó -> def sor, míg ((vonal = olvasó.readLine ())! = null) {println "$ { vonal}" } }

2.2. Használata File.eachLine

Használhatjuk a minden sor módszer:

új Fájl ("src / main / resources / fileContent.txt"). eachLine {sor -> println sor} 

2.3. Használata File.newInputStream val vel InputStream.eachLine

Lássuk, hogyan használhatjuk a InputStream val vel minden sor fájl olvasása:

def is = new File ("src / main / resources / fileContent.txt"). newInputStream () is.eachLine {println it} is.close ()

Amikor használjuk a newInputStream módszerrel foglalkoznunk kell a InputStream.

Ha a azInputStream segítségével metódus helyett a InputStream nekünk:

új fájl ("src / main / resources / fileContent.txt"). withInputStream {stream -> stream.eachLine {line -> println line}}

3. Olvasás a File ba be Lista

Néha egy fájl tartalmát kell felolvasnunk egy sorokba.

3.1. Használata File.readLines

Ehhez használhatjuk a readLines módszer, amely beolvassa a fájlt a Lista nak,-nek Húrok.

Vessünk egy gyors pillantást egy példára, amely beolvassa a fájl tartalmát és visszaadja a sorok listáját:

List readFileInList (String filePath) {Fájl fájl = új Fájl (filePath) def sorok = file.readLines () visszatérési sorok}

Írjunk egy gyors tesztet a segítségével fileContent.txt:

def 'Vissza kell adnia a fájl tartalmát a megadott fájlPath sorok listáján' () {megadott: def filePath = "src / main / resources / fileContent.txt" amikor: def sorok = readFile.readFileInList (filePath), akkor: lines.size (), 3}

3.2. Használata File.collect

A fájl tartalmát a-ra is olvashatjuk Lista nak,-nek Húrok használni a gyűjt API:

def list = new File ("src / main / resources / fileContent.txt"). gyűjtsük össze {it} 

3.3. Használni a mint Operátor

Még a mint operátor a fájl tartalmának a Húr sor:

def array = új fájl ("src / main / resources / fileContent.txt") karakterláncként []

4. Olvasás a File szingliként Húr

4.1. Használata File.text

Egy teljes fájlt egyetlen fájlba olvashatunk Húr egyszerűen a szöveg tulajdona File osztály.

Nézzünk meg egy példát:

String readFileString (String filePath) {Fájlfájl = új Fájl (filePath) Karaktersorozat fileContent = file.text return fileContent} 

Ellenőrizzük ezt egy egység teszt segítségével:

def 'Vissza kell adnia a fájl tartalmát a megadott fájlPath karakterláncban' () {megadott: def fájlPath = "src / main / resources / fileContent.txt" mikor: def fileContent = readFile.readFileString (filePath), majd: fileContent fileContent instanceof String fileContent.contains ("" "1. sor: Hello World !!! 2. sor: Ez egy fájl tartalma. 3. sor: Karaktersorozat tartalma" "")}

4.2. Használata File.getText

Ha a getTest (karakterkészlet) módszerrel olvashatjuk el a kódolt fájl tartalmát a Húr karakterkészlet megadásával, például UTF-8 vagy ASCII:

String readFileStringWithCharset (String filePath) {File file = new File (filePath) String utf8Content = file.getText ("UTF-8") return utf8Content}

Hozzunk létre egy UTF-8 tartalmú HTML fájlt utf8Content.html az egység teszteléséhez:

ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ ᛋᚳᛖᚪᛚ᛫ᚦᛖᚪᚻ᛫ᛗᚪᚾᚾᚪ᛫ᚷᛖᚻᚹᛦᛚᚳ᛫ᛗᛁᚳᛚᚢᚾ᛫ᚻᛦᛏ᛫ᛞᚫᛚᚪᚾ ᚷᛁᚠ᛫ᚻᛖ᛫ᚹᛁᛚᛖ᛫ᚠᚩᚱ᛫ᛞᚱᛁᚻᛏᚾᛖ᛫ᛞᚩᛗᛖᛋ᛫ᚻᛚᛇᛏᚪᚾ 

Lássuk az egység tesztet:

def 'Vissza kell adnia az UTF-8 kódolású fájltartalmat a megadott filePath karakterláncban' () {megadott: def filePath = "src / main / resources / utf8Content.html" amikor: def encodedContent = readFile.readFileStringWithCharset (filePath), majd: encodedContent encodedContent instanceof Húr }

5. Bináris fájl elolvasása a File.bytes

A Groovy megkönnyíti a nem szöveges vagy bináris fájlok olvasását. A bájtokat tulajdonság, megkaphatjuk a File mint a byte sor:

byte [] readBinaryFile (String filePath) {File file = new File (filePath) byte [] binaryContent = file.bytes return binaryContent}

Png képfájlt fogunk használni, sample.png, a következő tartalommal az egység teszteléséhez:

Lássuk az egység tesztet:

def 'Ha a bináris fájl tartalmát vissza kell adni a bájt tömbben megadott filePath' () {megadott: def filePath = "src / main / resources / sample.png" mikor: def binaryContent = readFile.readBinaryFile (filePath), akkor: binaryContent binaryContent byte [ ] binaryContent.length == 329}

6. Következtetés

Ebben a gyors bemutatóban különböző módszereket láthattunk egy fájl olvasására a Groovy-ban a File osztály a BufferedReader és InputStream.

Ezen megvalósítások és az egységtesztek teljes forráskódja megtalálható a GitHub projektben.


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