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
Ú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.