Como ler as últimas linhas de um arquivo em Java

Neste post vou deixar uma dica de como você pode fazer a leitura das últimas linhas de um arquivo em Java

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Java - DICA

Última atualização em: | 4067 Visualizações

Para ler as últimas linhas de um arquivo em Java, podemos usar a classe ReversedLinesFileReader da biblioteca Apache Commons IO.

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

Note que para verificar se existem atualizações da biblioteca pode acessar o Maven Repository.

Para nosso exemplo, considere o arquivo:

file.log
linha 01
linha 02
linha 03
linha 04
linha 05
linha 06
linha 07
linha 08
linha 09
linha 10


Lendo a última linha do arquivo em Java

Para fazer a leitura da última linha do arquivo, podemos utilizar o seguinte código:

File file = new File("C:\\file.log");
String lastLine = "";
try (ReversedLinesFileReader reader = new ReversedLinesFileReader(file, 1024, UTF_8)) {
    lastLine = reader.readLine();
} catch (IOException e) {
    e.printStackTrace();
}

System.out.println(lastLine);

A saída será: linha 10.

Lendo as últimas 5 linhas do arquivo em Java

Para ler as últimas linhas do arquivo, podemos utilizar o seguinte exemplo:

File file = new File("C:\\file.log");
List<String> lastLines = new ArrayList<>();
try (ReversedLinesFileReader reader = new ReversedLinesFileReader(file, 1024, UTF_8)) {
    String line = "";
    while ((line = reader.readLine()) != null && lastLines.size() < 5) {
        lastLines.add(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

System.out.println(String.join(",", lastLines));

A saída será: linha 10,linha 09,linha 08,linha 07,linha 06.

A classe de teste completa é:

import org.apache.commons.io.input.ReversedLinesFileReader;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.assertEquals;

public class ReadLastLineTest {

    @Test
    public void testReadLastLine() {
        File file = new File("C:\\file.log");
        String lastLine = "";
        try (ReversedLinesFileReader reader = new ReversedLinesFileReader(file, 1024, UTF_8)) {
            lastLine = reader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(lastLine);
        assertEquals("linha 10", lastLine);
    }

    @Test
    public void testReadLastFiveLines() {
        File file = new File("C:\\file.log");
        List<String> lastLines = new ArrayList<>();
        try (ReversedLinesFileReader reader = new ReversedLinesFileReader(file, 1024, UTF_8)) {
            String line = "";
            while ((line = reader.readLine()) != null && lastLines.size() < 5) {
                lastLines.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(String.join(",", lastLines));
        assertEquals(5, lastLines.size());
    }
}

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Apoiadores

Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!