5
respostas

NullPointerException

No Curso de Java e refatoração: melhorando códigos com boas práticas. 07 Usando a aplicação após ajustes. O instrutor pede para verificar se codigo está funcionando. Poré para mim ao selecionae a opção "4 -> Importar pets do abrigo" / Digite o id ou nome do abrigo: 1 / Digite o nome do arquivo CSV: pets.csva /

aparece a seguinte mensagem:

java.lang.NullPointerException: Cannot invoke "java.io.BufferedReader.readLine()" because "reader" is null at br.com.alura.service.PetService.importarPetsDoAbrigo(PetService.java:71) at br.com.alura.AdopetConsoleApplication.main(AdopetConsoleApplication.java:39)

5 respostas

Olá, Luiz! Tudo bem?

Poderia colocar seu código aqui para darmos uma olhada?? o NPE geralmente ocorre quando você tenta acessar um método ou propriedade de um objeto que ainda não foi inicializado, ou seja, está nulo.

esse é o código da linha do (PetService.java:71) while ((line = reader.readLine()) != null) e nome correto do arquivo é esse "pets.csv"

import br.com.alura.client.ClientHttpConfiguration; import br.com.alura.domain.Pet; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser;

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.net.http.HttpResponse; import java.util.Arrays; import java.util.List; import java.util.Scanner;

public class PetService {

private ClientHttpConfiguration client;

public PetService(ClientHttpConfiguration client){
    this.client = client;
}

public void listarPetsDoAbrigo() throws IOException, InterruptedException {
    System.out.println("Digite o id ou nome do abrigo:");
    String idOuNome = new Scanner(System.in).nextLine();

    String uri = "http://localhost:8080/abrigos/" +idOuNome +"/pets";

    /////
    HttpResponse<String> response = client.dispararRequisicaoGet(uri);

    int statusCode = response.statusCode();
    if (statusCode == 404 || statusCode == 500) {
        System.out.println("ID ou nome não cadastrado!");
    }
    String responseBody = response.body();

    ///
    Pet[] pets = new ObjectMapper().readValue(responseBody, Pet[].class);
    List<Pet> petList = Arrays.stream(pets).toList();

    System.out.println("Pets cadastrados:");
    for (Pet pet : petList) {
        long id = pet.getId();
        String tipo = pet.getTipo();
        String nome = pet.getNome();
        String raca = pet.getRaca();
        int idade = pet.getIdade();
        System.out.println(id +" - " +tipo +" - " +nome +" - " +raca +" - " +idade +" ano(s)");
    }
}

public void importarPetsDoAbrigo() throws IOException, InterruptedException {
    System.out.println("Digite o id ou nome do abrigo:");
    String idOuNome = new Scanner(System.in).nextLine();

    System.out.println("Digite o nome do arquivo CSV:");
    String nomeArquivo = new Scanner(System.in).nextLine();

    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader(nomeArquivo));
    } catch (IOException e) {
        System.out.println("Erro ao carregar o arquivo: " +nomeArquivo);
    }
    String line;
    while ((line = reader.readLine()) != null) {
        String[] campos = line.split(",");
        String tipo = campos[0];
        String nome = campos[1];
        String raca = campos[2];
        int idade = Integer.parseInt(campos[3]);
        String cor = campos[4];
        float peso = Float.parseFloat(campos[5]);

        ///
        Pet pet = new Pet(tipo, nome, raca, idade, cor, peso);

        String uri = "http://localhost:8080/abrigos/" + idOuNome + "/pets";

        /////
        HttpResponse<String> response = client.dispararRequisicaoPost(uri, pet);

        int statusCode = response.statusCode();
        String responseBody = response.body();
        if (statusCode == 200) {
            System.out.println("Pet cadastrado com sucesso: " + nome);
        } else if (statusCode == 404) {
            System.out.println("Id ou nome do abrigo não encontado!");
            break;
        } else if (statusCode == 400 || statusCode == 500) {
            System.out.println("Erro ao cadastrar o pet: " + nome);
            System.out.println(responseBody);
            break;
        }
    }
    reader.close();
}

}

Olá, Luiz! Desculpe a demora para responder mas eu desconfio que o erro esteja ocorrendo porquê na hora de digitar o nome do arquivo no console talvez esteja com espaços.

O nome do arquivo precisa ser pets.csv sem espaços antes ou depois, então certifica que você está digitando corretamente porquê como ele não acha o arquivo não consegue inicializar o reader.

O que pode ajudar a entender melhor o motivo do npe é adicionar no catch e.printStackTrace();, dessa forma obtemos mais informações sobre o erro que está ocorrendo. Ficaria assim:

try {
        reader = new BufferedReader(new FileReader(nomeArquivo));
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("Erro ao carregar o arquivo: " +nomeArquivo);
    }

Digite o id ou nome do abrigo: 1 Digite o nome do arquivo CSV: pets.csv

java.io.FileNotFoundException: pets.csv (The system cannot find the file specified) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:213) at java.base/java.io.FileInputStream.(FileInputStream.java:152) at java.base/java.io.FileInputStream.(FileInputStream.java:106) at java.base/java.io.FileReader.(FileReader.java:60) at br.com.alura.service.PetService.importarPetsDoAbrigo(PetService.java:66) at br.com.alura.AdopetConsoleApplication.main(AdopetConsoleApplication.java:39) java.lang.NullPointerException: Cannot invoke "java.io.BufferedReader.readLine()" because "reader" is null at br.com.alura.service.PetService.importarPetsDoAbrigo(PetService.java:72) at br.com.alura.AdopetConsoleApplication.main(AdopetConsoleApplication.java:39) Erro ao carregar o arquivo: pets.csv

por algum motivo não está encontrando o arquivo mesmo :/ eu recomendo você baixar o projeto do professor e tentar rodar para ver se funciona!! compara com seu projeto, talvez estamos deixando passar algo bobo https://cursos.alura.com.br/course/java-refatoracao-melhorando-codigos-boas-praticas/task/138307