0
respostas

05 Projeto final do curso - desafio, vamos consultar a API ViaCEP

Olá professores e professoras e a todos, não vai dar para finalizar tudo como eu queria, mas fiz o que pude dentro das minhas possibilidades de tempo e driblando todas as dificuldades.

Terminei o projeto e queria fazer algo diferente, queria fazer ainda mais, mas é que o tempo não deixa mais. Então vai a minha versão onde utilizei uma entrada com janela para o usuário digitar o CEP. Já criei a classe ValidaCep, podemos com expertise livrar o sistema em execução de perda de tempo, recursos de processamento por parte da CPU e consulta desnecessárias a recursos de rede externos enviando um dado de uma entrada invalida digitada pelo usuário. Aprendi da importância de se fazer a validação de entrada de dados para sistema. Esse projeto foi pequeno se comparado com um sistema de um aeroporto ou da fazenda por exemplo, então imaginem a perda de tempo e recursos consultar por exemplo toda vez um CEP invalido.

Quando você utiliza o try-with-resources em Java (introduzido no Java 7), não é necessário chamar manualmente close() no recurso, pois o próprio bloco garante que ele será fechado automaticamente ao final da execução, mesmo que ocorra uma exceção.

Fiz um curso de programação comercial com java no IFRO e o projeto final foi desenvolver uma aplicação para cadastrar alunos com banco de dados mysql. Ótimo curso.
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Principal.java
import javax.swing.;
import java.awt.
;
import java.io.IOException;
import java.util.Scanner;

public class Principal {
public static void main(String[] args) {

    //Criação do TextField para entrada de dados
    JTextField textField = new JTextField();
    JOptionPane.showMessageDialog(null, textField, "Digite o CEP p/ consulta (só números):", JOptionPane.PLAIN_MESSAGE);

    //Captura do texto inserido no TextField
    String cep = textField.getText();

    //Scanner scanner = new Scanner(System.in);
    ConsultaCep consultaCep = new ConsultaCep();

    //System.out.print("Digite o CEP (somente números): ");
    //String cep = scanner.nextLine().trim();

    // Validação de entrada básica do CEP cep.matches("\\d{8}")
    // retorna true se e somente se cep tiver exatamente 8 dígitos numéricos, sem espaços, letras ou símbolos.
    if (!cep.matches("\\d{8}")) {
        JOptionPane.showMessageDialog(null, "CEP inválido! Digite exatamente 8 números.");
        //System.out.println("CEP inválido! Digite exatamente 8 números.");
        return;
    }
    
    try {
        Endereco novoEndereco = consultaCep.buscaEndereco(cep);
        System.out.println(novoEndereco);
        GeradorDeArquivo gerador = new GeradorDeArquivo();
        gerador.salvaJson(novoEndereco);
    } catch (RuntimeException | IOException e) {
        System.out.println(e.getMessage());
        System.out.println("Finalizando a aplicação");
    }

}

}

Endereco.java
public record Endereco(String cep, String logradouro,
String complemento, String bairro,
String localidade, String uf) {
}

ConsultaCep
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class ConsultaCep {
public Endereco buscaEndereco(String cep) {
URI endereco = URI.create("https://viacep.com.br/ws/" + cep + "/json/");

    HttpRequest request = HttpRequest.newBuilder()
            .uri(endereco)
            .build();

    try {
        HttpResponse<String> response = HttpClient
                .newHttpClient()
                .send(request, HttpResponse.BodyHandlers.ofString());
        return new Gson().fromJson(response.body(), Endereco.class);

    } catch (Exception e) {
        throw new RuntimeException("Não consegui obter o endereço a partir desse CEP.");
    }
}

}

GeradorDeArquivo.java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class GeradorDeArquivo {

public void salvaJson(Endereco endereco) throws IOException {
    Gson gson = new GsonBuilder().setPrettyPrinting().create();

    //Principais Pontos:
    //•	FileWriter: Cria o arquivo ou o abre para gravação.
    //•	BufferedWriter: Melhora a performance da escrita.
    //BufferedWriter + FileWriter → Cria e escreve no arquivo.

    BufferedWriter escrita = new BufferedWriter(new FileWriter(endereco.cep()+ ".json" ));
            //(endereco.cep() + ".json");
    escrita.write(gson.toJson(endereco));
    escrita.close();

}

}