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.