Čítanie riadku na danom čísle riadku zo súboru v Jave

1. Prehľad

V tomto rýchlom článku sa pozrieme na rôzne spôsoby čítania riadku s daným číslom riadku v súbore.

2. Vstupný súbor

Začnime vytvorením jednoduchého súboru s názvom inputLines.txt ktoré použijeme vo všetkých našich príkladoch:

Riadok 1 Riadok 2 Riadok 3 Riadok 4 Riadok 5

3. Používanie BufferedReader

Pozrime sa na dobre známe BufferedReader triedy a jej výhoda neuloženia celého súboru do pamäte.

Môžeme prečítať súbor po riadku a zastaviť, keď chceme:

@Test public void givenFile_whenUsingBufferedReader_thenExtractedLineIsCorrect () {try (BufferedReader br = Files.newBufferedReader (Paths.get (FILE_PATH))) {for (int i = 0; i <3; i ++) {br.readLine (); } Reťazec extrahovanýRiadok = br.readLine (); assertEquals ("riadok 4", extrahovaný riadok); }}

4. Používanie Skener

Ďalším podobným prístupom, ktorý môžeme zvoliť, je použitie a Skener:

@Test public void givenFile_whenUsingScanner_thenExtractedLineIsCorrect () {try (Scanner scanner = new Scanner (new File (FILE_PATH)))) {for (int i = 0; i <3; i ++) {scanner.nextLine (); } Reťazec extrahovanýRiadok = scanner.nextLine (); assertEquals ("riadok 4", extrahovaný riadok); }}

Aj keď na malých súboroch, rozdiel medzi BufferedReader a Skener nemusí byť viditeľný, na väčších súboroch Skener bude pomalší, pretože tiež analyzuje a má menšiu veľkosť vyrovnávacej pamäte.

5. Používanie File API

5.1. Malé súbory

Môžeme použiť Files.readAllLines () z File API na ľahké načítanie obsahu súboru do pamäte a extrahovanie požadovaného riadku:

@Test public void givenSmallFile_whenUsingFilesAPI_thenExtractedLineIsCorrect () {String extrahovanýLine = Files.readAllLines (Paths.get (FILE_PATH)). Get (4); assertEquals ("Riadok 5", extrahovaný riadok); }

5.2. Veľké súbory

Ak potrebujeme pracovať s veľkými súbormi, mali by sme použiť riadky metóda, ktorá vráti a Prúd aby sme mohli čítať súbor po riadkoch:

@Test public void givenLargeFile_whenUsingFilesAPI_thenExtractedLineIsCorrect () {try (Stream lines = Files.lines (Paths.get (FILE_PATH))) {String extrahovanýLine = lines.skip (4) .findFirst (). Get (); assertEquals ("Riadok 5", extrahovaný riadok); }}

6. Používanie Apache Commons IO

Ďalšou možnosťou je použitie FileUtils trieda commons-io balíček, ktorý načíta celý súbor a vráti riadky ako zoznam Strings:

@ Test public void givenFile_whenUsingFileUtils_thenExtractedLineIsCorrect () {ClassLoader classLoader = getClass (). GetClassLoader (); Súbor file = nový File (classLoader.getResource ("linesInput.txt"). GetFile ()); Zoznam riadkov = FileUtils.readLines (súbor, "UTF-8"); Reťazec extrahovanýRiadok = lines.get (0); assertEquals ("riadok 1", extrahovaný riadok); }

Môžeme tiež použiť IOUtils triedy na dosiahnutie rovnakého výsledku, okrem tohto času sa však celý obsah vráti ako a String, a musíme si rozdelenie urobiť sami:

@Test public void givenFile_whenUsingIOUtils_thenExtractedLineIsCorrect () {String fileContent = IOUtils.toString (nový FileInputStream (FILE_PATH), StandardCharsets.UTF_8); Reťazec extrahovanýLine = fileContent.split (System.lineSeparator ()) [0]; assertEquals ("riadok 1", extrahovaný riadok); }

7. Záver

V tomto rýchlom článku sme sa oboznámili s najbežnejšími spôsobmi čítania riadku zo súboru so zadaným číslom riadku.

Ako obvykle sú príklady k dispozícii na GitHub.


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