Classe Principal: ConsultaCep.java
package br.com.alura.screenmatch.principal;
import br.com.alura.screenmatch.servicos.ConsultarCep;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
try {
System.out.println("Informe o número de cep:");
String cep = leitura.nextLine();
ConsultaCep.consultaCep(cep);
} catch (RuntimeException e) {
System.out.println(e.getMessage());
System.out.println("Finalizado o programa!");
}
}
}
#### Classe ConsultaCep: `ConsultaCep.java`
```java
package br.com.alura.screenmatch.servicos;
import br.com.alura.screenmatch.modelos.Endereco;
import br.com.alura.screenmatch.utils.ValidaCepConsultado;
import com.google.gson.Gson;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ConsultaCep {
public static void consultaCep(String numeroDoCep) {
String cepValidado = ValidaCepConsultado.validar(numeroDoCep);
if (cepValidado == null) {
System.out.println("CEP inválido. Informe no formato 00000000 ou 00000-000.");
return;
}
try {
String url = "https://viacep.com.br/ws/" + cepValidado + "/json/";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
String json = response.body();
Gson gson = new Gson();
Endereco endereco = gson.fromJson(json, Endereco.class);
if (Boolean.TRUE.equals(endereco.erro())) {
System.out.println("CEP não encontrado.");
} else {
System.out.println(endereco.toString());
// salvar os dados obitidos num arquivo endereço
GeradorDeArquivo gerador = new GeradorDeArquivo();
gerador.salvaJson(endereco);
}
} else {
System.err.println("Erro na requisição. Código de status: " + response.statusCode());
}
} catch (Exception e) {
System.err.println("Aconteceu um erro ao consultar o CEP: " + e.getMessage());
}
}
}
#### Classe ValidaCepConsultado: `validação e limpeza do CEP`
```java
package br.com.alura.screenmatch.utils;
public class ValidaCepConsultado {
public static String validar(String cepDigitado) {
String cepLimpo = cepDigitado.replaceAll("[^0-9]", "");
if (!cepLimpo.matches("\\d{8}")) {
return null;
}
return cepLimpo;
}
}
#### Classe GeradorDeArquivo: `salvando os dados do endereço`
```java
package br.com.alura.screenmatch.servicos;
import br.com.alura.screenmatch.modelos.Endereco;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
public class GeradorDeArquivo {
public void salvaJson(Endereco endereco) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String pasta = "enderecos_salvos";
String caminhoArquivo = pasta + "/" + endereco.cep() + ".json";
try (FileWriter escrita = new FileWriter(caminhoArquivo)) {
gson.toJson(endereco, escrita);
System.out.println("Endereço salvo no arquivo endereco.json.");
} catch (IOException e) {
System.err.println("Erro ao salvar o arquivo JSON: " + e.getMessage());
}
}
}
#### Classe Endereco: `representação dos dados retornados pelo ViaCEP`
```java
package br.com.alura.screenmatch.modelos;
public record Endereco(
String cep,
String logradouro,
String complemento,
String bairro,
String localidade,
String uf,
String ibge,
String gia,
String ddd,
String siafi,
Boolean erro // pode ser null se não existir
) {
@Override
public String toString() {
return """
CEP: %s
Logradouro: %s
Complemento: %s
Bairro: %s
Cidade: %s
UF: %s
""".formatted(cep, logradouro, complemento, bairro, localidade, uf);
}
}