Vonal beolvasása adott sorszámmal egy Java fájlból

1. Áttekintés

Ebben a rövid cikkben megvizsgáljuk a fájl belsejében lévő adott sorszámú sorok olvasásának különböző módjait.

2. Bemeneti fájl

Kezdjük egy egyszerű fájl létrehozásával inputLines.txt amelyet minden példánkban felhasználunk:

1. sor 2. vonal 3. vonal 4. sor 5. vonal

3. Használata BufferedReader

Nézzük meg a jól ismerteket BufferedReader osztály és annak előnye, hogy nem tárolja a teljes fájlt a memóriába.

Soronként elolvashatunk egy fájlt, és megállhatunk, amikor arra vágyunk:

@Test public void givenFile_whenUsingBufferedReader_thenExtractedLineIsCorrect () {try (BufferedReader br = Files.newBufferedReader (Paths.get (FILE_PATH))) {for (int i = 0; i <3; i ++) {br.readLine (); } String extractedLine = br.readLine (); assertEquals ("4. sor", extractedLine); }}

4. Használata Scanner

Egy másik hasonló megközelítés, amelyet alkalmazhatunk, az a használata Scanner:

@Test public void givenFile_whenUsingScanner_thenExtractedLineIsCorrect () {try (Scanner scanner = new Scanner (new File (FILE_PATH))) {for (int i = 0; i <3; i ++) {scanner.nextLine (); } String extractedLine = szkenner.nextLine (); assertEquals ("4. sor", extractedLine); }}

Bár kis fájlokon, a különbség a BufferedReader és Scanner nem feltűnő, nagyobb fájlokon a Scanner lassabb lesz, mivel elemzést is végez, és kisebb a puffermérete.

5. A File API használata

5.1. Kis akták

Tudjuk használni Files.readAllLines () a File API-ból, hogy könnyedén olvassa a fájl tartalmát a memóriába, és kivonja a kívánt sort:

@Test public void givenSmallFile_whenUsingFilesAPI_thenExtractedLineIsCorrect () {String extractedLine = Files.readAllLines (Paths.get (FILE_PATH)). Get (4); assertEquals ("5. sor", extractedLine); }

5.2. Nagy fájlok

Ha nagy fájlokkal kell dolgoznunk, akkor a vonalak metódus, amely a Folyam hogy soronként olvashassuk a fájlt:

@Test public void givenLargeFile_whenUsingFilesAPI_thenExtractedLineIsCorrect () {try (Stream vonalak = Files.lines (Paths.get (FILE_PATH))) {String extractedLine = lines.skip (4) .findFirst (). Get (); assertEquals ("5. vonal", extractedLine); }}

6. Az Apache Commons IO használata

Egy másik lehetőség a FileUtils osztálya commons-io csomag, amely beolvassa az egész fájlt, és a sorokat listaként adja vissza Húrs:

@Test public void givenFile_whenUsingFileUtils_thenExtractedLineIsCorrect () {ClassLoader classLoader = getClass (). GetClassLoader (); File file = new File (classLoader.getResource ("linesInput.txt"). GetFile ()); Lista sorok = FileUtils.readLines (fájl, "UTF-8"); String extractedLine = vonalak.get (0); assertEquals ("1. vonal", extractedLine); }

Használhatjuk a IOUtils osztály ugyanazon eredmény elérése érdekében, kivéve ezúttal, a teljes tartalmat a Húr, és magunknak kell felosztanunk:

@Test public void givenFile_whenUsingIOUtils_thenExtractedLineIsCorrect () {String fileContent = IOUtils.toString (new FileInputStream (FILE_PATH), StandardCharsets.UTF_8); String extractedLine = fileContent.split (System.lineSeparator ()) [0]; assertEquals ("1. vonal", extractedLine); }

7. Következtetés

Ebben a rövid cikkben áttekintettük a fájlokból az adott sorszámú sorok elolvasásának leggyakoribb módjait.

Szokás szerint a példák elérhetők a GitHub oldalon.