Falta pouco!

0 dias

0 horas

0 min

0 seg

1
resposta

[Bug] O meu código não está criando o arquivo json, e não acusa erro.

public class PrincipalComBusca {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
        String busca = "";
        List<Titulo> titulos = new ArrayList<>();
        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .setPrettyPrinting()
                .create();

        while (!busca.equalsIgnoreCase("sair")) {


            System.out.println("Digite um filme para busca: ");
            busca = leitura.nextLine();

            if (busca.equalsIgnoreCase("sair")){
                break;
            }

            String endereco = "https://www.omdbapi.com/?t=" + busca.replace(" ", "+") + "&apikey=eb5f6b63";
            System.out.println(endereco);
            try {
                HttpClient client = HttpClient.newHttpClient();
                HttpRequest request = HttpRequest.newBuilder()
                        .uri(URI.create(endereco))
                        .build();
                HttpResponse<String> response = client
                        .send(request, HttpResponse.BodyHandlers.ofString());
                String json = response.body();
                System.out.println(json);


                TituloOmdb meuTituloOmdb = gson.fromJson(json, TituloOmdb.class);
                System.out.println(meuTituloOmdb);
                // try {
                Titulo meuTitulo = new Titulo(meuTituloOmdb);
                System.out.println("Titulo ja convertido");
                System.out.println(meuTitulo);

                titulos.add(meuTitulo);
            } catch (NumberFormatException e) {
                System.out.println("Aconteceu um erro: ");
                System.out.println(e.getMessage());
            } catch (IllegalArgumentException e) {
                System.out.println("Algum erro de argumento na busca, verifique o endereço");
            } catch (ErroDeConversaoDeAnoException e) {
                System.out.println(e.getMensagem());
            }

        }
        System.out.println(titulos);

        FileWriter escrita = new FileWriter("filmes.json");
        escrita.write(gson.toJson(titulos));
        escrita.close();

        System.out.println("o programa finalizou corretamente");

    }
}
1 resposta

Ola! Pelo código ele deveria sim criar o arquivo filmes.json ao final da execução, logo depois que você digita "sair". Se o arquivo não está aparecendo e também não há erro, alguns pontos podem estar acontecendo:

Onde o arquivo é salvo

O new FileWriter("filmes.json") cria o arquivo no diretório raiz de onde você está executando a aplicação.
Se você está rodando pelo IntelliJ/Eclipse, normalmente o arquivo vai parar na pasta raiz do projeto, e não dentro de src/.

Faça um System.out.println(new File(".").getAbsolutePath()); logo antes do FileWriter para confirmar o caminho real.

O loop precisa ser finalizado

O arquivo só é escrito depois que o loop while termina (quando você digita sair).
Se você está apenas digitando filmes e fechando a execução no botão “stop” do IDE, o trecho que grava o JSON nunca chega a ser executado.

Possível problema de permissão

Se você estiver executando em um ambiente com restrições (alguns sandboxes, WSL, ou containers), pode ser que o programa não tenha permissão para criar arquivos. Mas nesse caso o FileWriter normalmente lançaria IOException.

Ve se a lista não está vazia

Mesmo que a lista titulos esteja vazia, o arquivo ainda deveria ser criado (só que contendo []).
Se não existir nenhum arquivo, é mais provável ser a questão do diretório de execução ou do encerramento incorreto do programa.

Sugestão para depurar:

System.out.println("Gravando arquivo no diretório: " + new File(".").getAbsolutePath());

FileWriter escrita = new FileWriter("filmes.json");
escrita.write(gson.toJson(titulos));
escrita.close();
System.out.println("Arquivo filmes.json criado com sucesso!");