Čí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.