1
resposta

Desafio final concluído!

Finalizei o desafio com algumas dificuldades mas no meio do caminho consegui tirar as dúvidas.Fiz algumas adaptações na estrutura do projeto e o código acabou sendo dividido em várias classes. Como o projeto ficou extenso, vou disponibilizar apenas o link do GitHub:
https://github.com/bern0x/findaddress

1 resposta

Olá, Bernardo. Como vai?

Parabéns pela conclusão do desafio final do curso! Desenvolver uma aplicação que consome APIs externas, grava arquivos e lida com o tratamento de exceções é um marco enorme na jornada de qualquer pessoa que estuda Java.

O fato de você ter sentido dificuldades e feito adaptações na estrutura do projeto dividindo o código em várias classes não é um problema, mas sim um excelente sinal de amadurecimento técnico! No mercado de trabalho e em projetos reais em Java, a prática de separar o código em múltiplos arquivos e classes é o padrão absoluto e segue um dos princípios mais importantes da orientação a objetos: o Princípio da Responsabilidade Única (Single Responsibility Principle).

Em vez de criar um código gigante onde uma única classe faz tudo (chama a API, converte o texto, trata os erros e escreve o arquivo), dividimos o sistema em especialistas:

  • Classe Record/DTO: Apenas para mapear os dados puros que vêm da API (o formato JSON).
  • Classe de Serviço (Client): Especialista em configurar o HttpClient, fazer a requisição e capturar a resposta.
  • Classe Geradora de Arquivos: Especialista em pegar os dados prontos e salvá-los no disco (usando FileWriter e Gson).
  • Classe Principal (Main): Apenas coordena o fluxo, recebendo as entradas do usuário.

Essa separação facilita muito a manutenção do software, permite criar testes automatizados para cada pedaço isolado e evita que um erro em uma ponta derrube o sistema inteiro de forma inesperada.

Uma dica de ouro sobre o gerenciamento de recursos ao gravar arquivos em Java: certifique-se de que a sua classe que escreve os arquivos utiliza a estrutura Try-with-resources. Quando abrimos uma conexão com o disco rígido para gravar um arquivo, precisamos garantir que essa conexão seja fechada, mesmo se ocorrer um erro durante a gravação. O Try-with-resources faz isso de forma automática e elegante.

Veja este exemplo de boa prática para a escrita de arquivos:

import java.io.FileWriter;
import java.io.IOException;

public class GeradorDeArquivo {
    public void salvaJson(String json) {
        // Ao declarar o FileWriter dentro dos parênteses do try, 
        // o Java garante o fechamento automático do arquivo ao final da execução.
        try (FileWriter writer = new FileWriter("enderecos.json")) {
            writer.write(json);
            System.out.println("Arquivo gravado com sucesso!");
        } catch (IOException e) {
            System.out.println("Erro ao tentar gravar o arquivo: " + e.getMessage());
        }
    }
}

Sensacional a iniciativa de publicar o seu projeto no GitHub e compartilhar o link com a comunidade aqui no fórum. Criar esse portfólio desde o início dos estudos faz toda a diferença na carreira.

Espero que possa ter lhe ajudado!