Existem muitas maneiras de ler um arquivo de texto em Java. Vamos analisar os diferentes métodos de leitura de arquivos de texto em Java, um por um.
Ler arquivo de texto em Java
Existem muitas maneiras de ler um arquivo de texto em Java. Um arquivo de texto é composto por caracteres, então podemos usar classes de leitor (Reader). Também existem algumas classes de utilitário para ler um arquivo de texto em Java.
- Ler arquivo de texto em Java usando a classe Files
- Ler arquivo de texto em Java usando
FileReader
- Ler arquivo de texto em Java usando BufferedReader
- Usando a classe Scanner para ler arquivos de texto em Java
Agora, vamos ver exemplos mostrando como ler um arquivo de texto em Java usando essas classes.
Java lê arquivo de texto usando java.nio.file.Files
Podemos usar a classe Files para ler todo o conteúdo de um arquivo em um array de bytes. A classe Files também possui um método para ler todas as linhas para uma lista de strings. A classe Files foi introduzida no Java 7 e é boa se você quiser carregar todo o conteúdo do arquivo. Você deve usar este método apenas quando estiver trabalhando com arquivos pequenos e precisar de todo o conteúdo do arquivo na memória.
String fileName = "/Users/pankaj/source.txt";
Path path = Paths.get(fileName);
byte[] bytes = Files.readAllBytes(path);
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
Ler arquivo de texto em java usando java.io.FileReader
Você pode usar FileReader para obter o BufferedReader e então ler os arquivos linha por linha. FileReader não suporta codificação e trabalha com a codificação padrão do sistema, então não é uma maneira muito eficiente de ler um arquivo de texto em java.
String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
//processa a linha
System.out.println(line);
}
Java lê arquivo de texto usando java.io.BufferedReader
BufferedReader é bom se você deseja ler um arquivo linha por linha e processá-lo. É bom para processar arquivos grandes e também suporta codificação. BufferedReader é sincronizado, então operações de leitura em um BufferedReader podem ser feitas com segurança a partir de várias threads. O tamanho padrão do buffer do BufferedReader é 8KB.
String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null){
//processar a linha
System.out.println(line);
}
br.close();
Usando scanner para ler arquivo de texto em Java
Se você deseja ler um arquivo linha por linha ou baseado em alguma expressão regular Java, Scanner é a classe a ser utilizada. O Scanner quebra sua entrada em tokens usando um padrão de delimitador, que por padrão corresponde a espaços em branco. Os tokens resultantes podem então ser convertidos em valores de diferentes tipos usando os vários métodos next. A classe scanner não é sincronizada e, portanto, não é segura para threads.
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//ler linha por linha
while(scanner.hasNextLine()){
//processar cada linha
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
Exemplo de Leitura de Arquivo em Java
Aqui está o exemplo de classe mostrando como ler um arquivo de texto em java. Os métodos de exemplo estão usando Scanner, Files, BufferedReader com suporte a codificação e FileReader.
package com.journaldev.files;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;
public class JavaReadFile {
public static void main(String[] args) throws IOException {
String fileName = "/Users/pankaj/source.txt";
//usando a classe Files do Java 7 para processar arquivos pequenos, obter dados de arquivo completos
readUsingFiles(fileName);
//usando a classe Scanner para arquivos grandes, para ler linha por linha
readUsingScanner(fileName);
//lendo usando BufferedReader, para ler linha por linha
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
//lendo usando FileReader, sem suporte a codificação, não eficiente
readUsingFileReader(fileName);
}
private static void readUsingFileReader(String fileName) throws IOException {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("Reading text file using FileReader");
while((line = br.readLine()) != null){
//processar a linha
System.out.println(line);
}
br.close();
fr.close();
}
private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException {
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.println("Read text file using InputStreamReader");
while((line = br.readLine()) != null){
//processar a linha
System.out.println(line);
}
br.close();
}
private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException {
Path path = Paths.get(fileName);
BufferedReader br = Files.newBufferedReader(path, cs);
String line;
System.out.println("Read text file using BufferedReader Java 7 improvement");
while((line = br.readLine()) != null){
//processar a linha
System.out.println(line);
}
br.close();
}
private static void readUsingBufferedReader(String fileName) throws IOException {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("Read text file using BufferedReader");
while((line = br.readLine()) != null){
//processar a linha
System.out.println(line);
}
//fechar recursos
br.close();
fr.close();
}
private static void readUsingScanner(String fileName) throws IOException {
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//ler linha por linha
while(scanner.hasNextLine()){
//processar cada linha
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
}
private static void readUsingFiles(String fileName) throws IOException {
Path path = Paths.get(fileName);
//ler arquivo para array de bytes
byte[] bytes = Files.readAllBytes(path);
System.out.println("Read text file using Files class");
//ler arquivo para lista de Strings
@SuppressWarnings("unused")
List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(new String(bytes));
}
}
A escolha de usar um Scanner ou BufferedReader ou Files para ler arquivo depende dos requisitos do seu projeto. Por exemplo, se você estiver apenas registrando o arquivo, pode usar Files e BufferedReader. Se estiver procurando analisar o arquivo com base em um delimitador, deve usar a classe Scanner. Antes de encerrar este tutorial, quero mencionar sobre RandomAccessFile
. Podemos usar isso para ler arquivos de texto em java.
RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
Isso é tudo para os programas de exemplo de leitura de arquivo de texto em Java.
Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file