Čítanie súboru v Groovy

1. Prehľad

V tomto rýchlom výučbe preskúmame rôzne spôsoby čítania súborov v aplikácii Groovy.

Groovy poskytuje pohodlné spôsoby narábania so súbormi. Budeme sa sústrediť na Súbor trieda, ktorá má niektoré pomocné metódy na čítanie súborov.

Poďme ich preskúmať jeden po druhom v nasledujúcich častiach.

2. Čítanie a Súbor Riadok po riadku

Existuje veľa metód Groovy IO readLine a eachLine k dispozícii na čítanie súborov riadok po riadku.

2.1. Použitím File.withReader

Začnime s Súbor.withReader metóda. Vytvára nový BufferedReader pod obálkami, ktoré môžeme použiť na čítanie obsahu pomocou readLine metóda.

Napríklad si prečítajme riadok po riadku a každý riadok vytlačme. Vrátime tiež počet riadkov:

int readFileLineByLine (String filePath) {File file = new File (filePath) def line, noOfLines = 0; file.withReader {reader -> while ((line = reader.readLine ())! = null) {println "$ {line}" noOfLines ++}} vrátiť noOfLines}

Vytvorme súbor vo formáte obyčajného textu fileContent.txt s nasledujúcim obsahom a použite ho na testovanie:

1. riadok: Ahoj svet !!! Riadok 2: Toto je obsah súboru. Riadok 3: Obsah reťazca

Vyskúšajme si našu utilitu:

def 'Mal by vrátiť počet riadkov v File zadaný filePath' () {given: def filePath = "src / main / resources / fileContent.txt" keď: def noOfLines = readFile.readFileLineByLine (filePath) potom: noOfLines noOfLines inštancia Integer tvrdí noOfLines , 3} 

The withReader Túto metódu je možné použiť aj na čítanie kódovaných súborov s parametrom charset, ako je UTF-8 alebo ASCII. Pozrime sa na príklad:

new File ("src / main / resources / utf8Content.html"). withReader ('UTF-8') {reader -> def line while ((line = reader.readLine ())! = null) {println "$ { riadok} "}}

2.2. Použitím File.eachLine

Môžeme tiež použiť eachLine metóda:

nový súbor ("src / main / resources / fileContent.txt"). eachLine {line -> println line} 

2.3. Použitím File.newInputStream s InputStream.eachLine

Pozrime sa, ako môžeme použiť InputStream s eachLine prečítať súbor:

def je = nový súbor ("src / main / resources / fileContent.txt"). newInputStream () is.eachLine {println it} is.close ()

Keď použijeme newInputStream metódou, musíme sa vyrovnať so zatvorením InputStream.

Ak použijeme withInputStream metóda namiesto toho sa bude zaoberať zatváraním InputStream pre nás:

nový súbor ("src / main / resources / fileContent.txt"). withInputStream {stream -> stream.eachLine {line -> println line}}

3. Čítanie a Súbor do a Zoznam

Niekedy musíme prečítať obsah súboru do zoznamu riadkov.

3.1. Použitím File.readLines

Na tento účel môžeme použiť readLines metóda, ktorá načíta súbor do a Zoznam z Struny.

Poďme sa rýchlo pozrieť na príklad, ktorý číta obsah súboru a vracia zoznam riadkov:

Zoznam readFileInList (reťazec filePath) {File file = new File (filePath) def lines = file.readLines () return lines}

Poďme napísať rýchly test pomocou fileContent.txt:

def 'Mal by vrátiť obsah súboru v zozname riadkov, ktoré majú daný filePath' () {given: def filePath = "src / main / resources / fileContent.txt" keď: def lines = readFile.readFileInList (filePath) potom: riadky riadkov inštancia zoznamu lines.size (), 3}

3.2. Použitím File.collect

Môžeme tiež načítať obsah súboru do a Zoznam z Struny pomocou zbierať API:

def list = nový súbor ("src / main / resources / fileContent.txt"). collect {it} 

3.3. Pomocou ako Prevádzkovateľ

Môžeme dokonca využiť ako operátor načítať obsah súboru do a String pole:

def array = nový súbor ("src / main / resources / fileContent.txt") ako reťazec []

4. Čítanie a Súbor do single String

4.1. Použitím Súbor.text

Môžeme prečítať celý súbor do jedného String jednoducho pomocou text majetok Súbor trieda.

Pozrime sa na príklad:

String readFileString (String filePath) {File file = new File (filePath) String fileContent = file.text return fileContent} 

Overme to pomocou testu jednotky:

def 'Mal by vrátiť obsah súboru v reťazci zadanom filePath' () {given: def filePath = "src / main / resources / fileContent.txt" keď: def fileContent = readFile.readFileString (filePath) potom: fileContent fileContent instanceof String fileContent.contains ("" "Riadok 1: Hello World !!! Riadok 2: Toto je obsah súboru. Riadok 3: Obsah reťazca" "")}

4.2. Použitím File.getText

Ak použijeme getTest (znaková sada) metódou môžeme načítať obsah kódovaného súboru do a String zadaním parametra znakovej sady, ako je UTF-8 alebo ASCII:

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

Vytvorme súbor HTML s názvom UTF-8 utf8Content.html na testovanie jednotky:

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

Pozrime sa na test jednotky:

def 'Mal by vrátiť obsah súboru kódovaného UTF-8 v reťazci zadanom filePath' () {given: def filePath = "src / main / resources / utf8Content.html" keď: def encodedContent = readFile.readFileStringWithCharset (filePath) potom: encodedContent encodedContent instanceof Reťazec}

5. Čítanie binárneho súboru pomocou File.bytes

Vďaka programu Groovy je ľahké čítať netextové alebo binárne súbory. Použitím bajtov majetku, môžeme získať obsah Súbor ako bajt pole:

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

Použijeme obrazový súbor png, sample.png, s nasledujúcim obsahom na testovanie jednotky:

Pozrime sa na test jednotky:

def 'Mal by vrátiť obsah binárneho súboru v bajtovom poli daný filePath' () {given: def filePath = "src / main / resources / sample.png" keď: def binaryContent = readFile.readBinaryFile (filePath) potom: binaryContent binaryContent instanceof byte [ ] binaryContent.length == 329}

6. Záver

V tomto rýchlom návode sme videli rôzne spôsoby čítania súborov v aplikácii Groovy pomocou rôznych metód súboru Súbor triedy spolu s BufferedReader a InputStream.

Kompletný zdrojový kód týchto implementácií a testovacích prípadov jednotiek nájdete v projekte GitHub.


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