Existem muitas maneiras de ler um arquivo de texto em Java. Vamos examinar, uma por uma, diferentes métodos de leitura de arquivos de texto em Java.
Java read text file
Existem várias maneiras de ler um arquivo de texto em Java. Um arquivo de texto é composto por caracteres, então podemos usar classes Reader. Também existem algumas classes de utilitário para ler um arquivo de texto em Java.
- Java read text file usando a classe Files
- Leia um arquivo de texto em Java usando
FileReader
- Java read text file usando BufferedReader
- Usando a classe Scanner para ler um arquivo de texto em Java
Agora, vamos examinar exemplos que mostram 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 uma matriz 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 é útil quando você deseja carregar todo o conteúdo do arquivo. Deve-se usar este método apenas ao trabalhar com arquivos pequenos e quando é necessário ter 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 o FileReader para obter o BufferedReader e depois ler os arquivos linha por linha. O FileReader não suporta codificação e funciona 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){
//processar a linha
System.out.println(line);
}
Java lê arquivo de texto usando java.io.BufferedReader
BufferedReader é bom se você quiser 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 múltiplas threads. O tamanho do buffer padrão do BufferedReader é de 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ê quiser ler um arquivo linha por linha ou baseado em alguma expressão regular Java, Scanner é a classe a ser usada. O Scanner divide sua entrada em tokens usando um padrão delimitador, que por padrão corresponde a espaços em branco. Os tokens resultantes podem então ser convertidos em valores de tipos diferentes 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 Java
Aqui está a classe de exemplo 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 completos do arquivo
readUsingFiles(fileName);
//usando a classe Scanner para arquivos grandes, para ler linha por linha
readUsingScanner(fileName);
//ler usando BufferedReader, para ler linha por linha
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
//ler 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 matriz 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ê está apenas registrando o arquivo, você pode usar Files e BufferedReader. Se você está procurando analisar o arquivo com base em um delimitador, você deve usar a classe Scanner. Antes de concluir 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 programas de exemplo de leitura de arquivos de texto em java.
Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file