package br.com.nadson.modelo;
public record Endereco(String cep, String logradouro, String complemento, String bairro, String localidade, String uf) {
@Override
public String toString() {
return String.format(
"CEP: %s, Logradouro: %s, Complemento: %s, Bairro: %s, Cidade: %s, UF: %s",
cep, logradouro, complemento, bairro, localidade, uf
);
}
}
package br.com.nadson.excessao;
public class CepInvalidoException extends RuntimeException {
public CepInvalidoException(String s) {
super(s);
}
}
package br.com.nadson.modelo;
import br.com.nadson.excessao.CepInvalidoException;
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 ApiCep {
private String cep;
private final HttpClient client = HttpClient.newHttpClient();
public void setCep(String cep) {
this.cep = cep;
}
public String consultar() {
validarCep();
String endereco = "https://viacep.com.br/ws/" + cep + "/json/";
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endereco))
.GET()
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 400) {
throw new CepInvalidoException("CEP inválido: " + cep);
}
return response.body();
} catch (IOException | InterruptedException e) {
throw new RuntimeException("Falha ao consultar API: " + e.getMessage());
}
}
private void validarCep() {
if (cep == null || cep.isBlank()) {
throw new CepInvalidoException("CEP não informado.");
}
if (!cep.matches("\\d{8}")) {
throw new CepInvalidoException("CEP deve conter exatamente 8 números.");
}
}
}
package br.com.nadson.principal;
import br.com.nadson.excessao.CepInvalidoException;
import br.com.nadson.modelo.ApiCep;
import br.com.nadson.modelo.Endereco;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
ApiCep api = new ApiCep();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
List<Endereco> enderecos = new ArrayList<>();
try (FileWriter escrita = new FileWriter("enderecos.json")) {
while (true) {
System.out.println("Digite um CEP (ou 'sair' para terminar): ");
String cepDigitado = entrada.nextLine().trim();
if (cepDigitado.equalsIgnoreCase("sair")) {
break;
}
try {
api.setCep(cepDigitado);
String json = api.consultar();
if (json.contains("\"erro\": true")) {
throw new CepInvalidoException("CEP não encontrado: " + cepDigitado);
}
Endereco endereco = gson.fromJson(json, Endereco.class);
enderecos.add(endereco);
System.out.println("Endereço adicionado!");
} catch (CepInvalidoException e) {
System.out.println("Erro: " + e.getMessage());
} catch (RuntimeException e) {
System.out.println("Falha ao consultar API: " + e.getMessage());
}
}
escrita.write(gson.toJson(enderecos));
System.out.println("Arquivo salvo com sucesso.");
} catch (IOException e) {
System.out.println("Erro ao criar arquivo: " + e.getMessage());
}
System.out.println("Programa finalizado.");
}
}