Preferi qualquer tudo em uma pasta só json, antes disso coloquei em um Conjunto Set<> pra não se repetir nenhuma pesquisa, pq fiz um loop para poder pesquisar mais de um endereço se a pessoa quiser, e quando nao quiser mais tudo vai pro json. Projetinho muito bacana.
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 Endereco buscaCep(String cep) {
String endereco = "https://viacep.com.br/ws/" + cep + "/json/";
System.out.println(endereco);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endereco))
.build();
try {
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
return new Gson().fromJson(response.body(), Endereco.class);
} catch (Exception ex) {
throw new RuntimeException("Não consegui obter o endereço a partir desse cep.");
}
}
}
public record Endereco(String cep, String logradouro, String complemento,
String bairro, String localidade, String uf) {
}
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class Principal {
public static void main(String[] args) throws IOException {
Scanner leitura = new Scanner(System.in);
boolean continuar = true;
ConsultaCep consultaCep = new ConsultaCep();
Set<Endereco> enderecos = new HashSet<>();
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.create();
while (continuar) {
System.out.println("Digite o numero do cep:");
var busca = leitura.next();
busca = busca.replaceAll("[-.]", "");
try {
Endereco novoCep = consultaCep.buscaCep(busca);
System.out.println(novoCep);
enderecos.add(novoCep);
} catch (RuntimeException ex){
System.out.println(ex.getMessage());
}
String proximo;
while (true) {
System.out.println("Aceita fazer uma nova consulta? S/N.");
proximo = leitura.next().toUpperCase();
if (proximo.equals("S")) {
continuar = true;
break;
} else if (proximo.equals("N")) {
continuar = false;
System.out.println("Finalizando a aplicação.");
break;
} else {
System.out.println("Resposta invalida. Digite 'S' ou 'N'.");
}
}
}
FileWriter escrita = new FileWriter("enderecos.json");
escrita.write(gson.toJson(enderecos));
escrita.close();
}
}