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.
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();
}
}