Reading_Files - F4NT0/J4V4 GitHub Wiki

Retornar

Lendo de um arquivo texto

  • Para se Escrever um texto, Clique Aqui

A leitura de um arquivo texto é feito de forma similar a Escrever um arquivo texto, mas usando a Classe BufferedReader

  • Escrevendo um Arquivo texto .txt comum:
import java.nio.charset.Charset;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.IOException;
import java.io.PrintWriter;

public class EscrevendoTexto{
    public static void main(String args[]){
        Path caminhoArquivo = Paths.get("Arquivo.txt"); //Se não existir ele irá criar um
        try(PrintWriter escrever = new PrintWriter(Files.newBufferedWriter(caminhoArquivo, Charset.forName("utf8"))))
        {
            escrever.println("Escrevendo em uma linha");
            escrever.println("Escrevendo em outra linha");
        }
        catch (IOException e){
            System.err.format("Erro de E/S: %s%n", e);
        }
    }
}
  • Lendo esse arquivo texto:
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class LendoTexto {
    public static void main(String args[]){
        Path caminhoArquivo = Paths.get("Arquivo.txt"); //Procura pelo arquivo específico
        try(BufferedReader leitor = Files.newBufferedReader(caminhoArquivo, Charset.forName("utf8")))
        {
          String line = null; //a variável é iniciada nula, se não tiver informação no arquivo
            int count = 1;
          while((line = leitor.readLine()) != null)
          {
              System.out.println(count + " " + line);
              count++;
          }

        }
        catch (IOException e){
           System.err.format("Erro de E/S: %s%n", e);
        }
    }

}

  • Essa forma acima de leitura de arquivo texto vai pegando toda a linha e vai imprimindo na tela

Leitura de um arquivo texto, lendo palavra por palavra

*Iremos utilizar a Classe Scanner para poder ler palavra por palavra do texto criado

  • Para ler dados formatados, pode-se usar a classe Scanner
  • A classe Scanner por padrão separa a entrada por espaços em branco
  • Pode-se especificar um separador especifico, utilizando a classe Pattern
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class LendoPalavras {
    public static void main(String[] args) {
    	Path caminho = Paths.get("Arquivo.txt");
    	try (Scanner sc = new Scanner(Files.newBufferedReader(caminho,Charset.forName("utf8")))){
    		String palavra = null;
    		while(sc.hasNext()) {
    			palavra = sc.next();
    			System.out.println("Palavra: " + palavra);
    		}
    	}
    	catch (IOException x) {
    		System.err.format("Erro!" + x);
    	}
    }
}

Lendo o arquivo texto e armazenando as palavras em variáveis

  • Iremos ler o seguinte texto:
Leticia;24;33558787
  • Esse arquivo texto esta formatado na forma Nome;Idade;Telefone
  • Escrevendo Esse Arquivo:
import java.nio.charset.Charset;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.IOException;
import java.io.PrintWriter;

public class EscrevendoTexto2{
    public static void main(String args[]){
        Path caminhoArquivo = Paths.get("Dados.txt"); //Se não existir ele irá criar um
        try(PrintWriter escrever = new PrintWriter(Files.newBufferedWriter(caminhoArquivo, Charset.forName("utf8"))))
        {
           String nome = "leticia";
           String idade = "24";
           String telefone = "33558787";
           escrever.format("%s;%s;%s%n", nome,idade,telefone);
        }
        catch (IOException e){
            System.err.format("Erro de E/S: %s%n", e);
        }
    }
}
  • Lendo esse Arquivo E salvando em variáveis:
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class LendoESalvando {
   public static void main(String[] args) {
	   Path path2 = Paths.get("Dados.txt");
	   try(Scanner sc = new Scanner(Files.newBufferedReader(path2,Charset.forName("utf8")))){
		   sc.useDelimiter("[;\n]"); //os Delimitadores do arquivo, que não serão lidos
		   //String header = sc.nextLine(); //pula o cabeçalho
		   String nome,idade,telefone;
		   while(sc.hasNext()) {
			   nome = sc.next();
			   idade = sc.next();
			   telefone = sc.next();
			   System.out.format("%s %s %s %n", nome,idade,telefone); //formato da saida 
		      //ou System.out.format("%s,%s = (%s) %n"), nome,idade,telefone);
		   }
	   }
	   catch (IOException x) {
		   System.err.format("Erro de E/S: %s%n", x);
	   }
   }
}

Lendo um arquivo linha a linha e salvando em variáveis

  • Uma alternativa que podemos fazer é ler linha a linha usando apenas o BufferedReader e depois quebrar cada linha com um Scanner

  • Irei mostrar um exemplo de um código feito com o arquivo Dados.txt mostrado antes

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class LendoESalvando2 {
   public static void main(String[] args) {
	   Path path2 = Paths.get("Dados.txt");
	   try (BufferedReader lendo = Files.newBufferedReader(path2, Charset.defaultCharset())){
		   String linha = null;
		   while((linha = lendo.readLine()) != null) {
			   Scanner sc = new Scanner(linha).useDelimiter(";"); //usando o limitador ;
		       String nome,idade,telefone;
		       nome = sc.next();
		       idade = sc.next();
		       telefone = sc.next();
		       System.out.format("%s %s %s%n", nome,idade,telefone);
		   }
	   }
	   catch (IOException x) {
		   System.err.format("Erro %s%n", x);
	   }
   }
}