package br.com.desafiobuscarporcep.principal;
import br.com.desafiobuscarporcep.consulta.ConsultaCep;
import br.com.desafiobuscarporcep.geradorarquivo.GeradorDeArquivo;
import br.com.desafiobuscarporcep.record.Endereco;
import java.io.IOException;
import java.util.Scanner;
public class Principal {
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        ConsultaCep consultaCep = new ConsultaCep();
        String cep = "";
        while(!cep.equalsIgnoreCase("s")) {
            System.out.println("Digite CEP para consulta, ou alguma letra para sair.");
            cep = teclado.nextLine();
            try {
                if(!cep.matches("[0-9]*")){
                    break;
                }
                Endereco novoEndereco = consultaCep.buscaCep(cep);
                if(novoEndereco.cep() == null)
                    System.out.println("Cep não cadastrado!!!");
                System.out.println(novoEndereco);
                GeradorDeArquivo gerador = new GeradorDeArquivo();
                gerador.salvaJson(novoEndereco);
            } catch (RuntimeException | IOException e) {
                System.out.println(e.getMessage());
            } finally {
                System.out.println("Finalizando a aplicação!!!\n");
            }
        }
    }
}
import br.com.desafiobuscarporcep.record.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) throws IOException {
        try {
            Gson gson = new GsonBuilder()
                    .setPrettyPrinting()
                    .create();
            FileWriter escrita = new FileWriter(endereco.cep() + ".json");
            escrita.write(gson.toJson(endereco));
            escrita.close();
        } catch (IOException e){
            System.out.println("Erro ao gerar arquivo!! " + e.getMessage());
        }
    }
}
import br.com.desafiobuscarporcep.record.Endereco;
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){
        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("Cep sem endereço!!!!");
        }
    }
}
package br.com.desafiobuscarporcep.record;
public record Endereco(String cep,
                       String logradouro,
                       String localidade,
                       String uf) {
    @Override
    public String toString() {
        return "Endereco ( " +
                "cep = " + cep +
                ", logradouro = " + logradouro  +
                ", localidade = " + localidade +
                ", uf = " + uf + " )";
    }
}
Boa noite! Gostaria de melhorar o código porém , preciso de uma ajuda. Na classe Principal consegui veificar se o novoEndereco é null, mas infelizmente consegui fazer somente o programa parar. Muito "Feio" gerar um arquivo null. Claro se tiver mais algum conselho, ajuda, será bem vinda. Obrigado.