Java.lang.NullPointerException

7 respostas
C

Estou tendo um problema aqui:

Preciso receber informações de um arquivo de texto separados por |
1|true|false
2|false|true
...

E com essas informações criar um "Quarto", (int, boolean, boolean)

Está dando erro no elemento = linha.split("\\|")
java.lang.NullPointerException

FileReader fr = new FileReader("quartos.txt");
BufferedReader br = new BufferedReader(fr);

String linha = br.readLine();
String[] elemento = null;

elemento = linha.split("\\|");
for(int k = 0; k < elemento.length; k++){
     Quarto q = new Quarto(Integer.parseInt(elemento[0]), Boolean.parseBoolean(elemento[1]), Boolean.parseBoolean(elemento[2]));
}

7 Respostas

Rodrigo_Sasaki

Se o erro está nessa linha então sua chamada a br.readLine() está retornando null.

C

Sim, mas porque está retornando null ? o que está errado…
segue o conteúdo do arquivo quartos.txt

1|true|false
2|true|false
3|true|true
4|false|true
5|false|false

não era pra ficar : elemento[0] = 1
elemento[1] = true
elemento[2] = false
para a primeira chamada do br.readLine();

Rodrigo_Sasaki

Tem certeza que ele está encontrando o arquivo correto?

Tente escrever o nome completo do arquivo, por exemplo:

Se estiver na raiz do disco C:FileReader fr = new FileReader("C:/quartos.txt");

C

Sim ele encontra o arquivo porque senão cairia naquele if(linha == null), ja apaguei todo conteúdo do arquivo e ele cai nisso... ele encontrá mais nao consegue ler... ou sei lá... segue o método...

public Quarto[][] carregaArrayQuartos() {
        try{
            //Prepara o arquivo para leitura.
            FileReader fr = new FileReader("quartos.txt");
            //Lê o arquivo.
            BufferedReader br = new BufferedReader(fr);
            
            //Lê linha por linha.
            String linha = br.readLine();
            String[] elemento = null;
            
            ////Trata exceção de arquivo vazio.
            if(linha == null)
                System.out.println("O arquivo esta vazio.");
            
            
            quantQuartos = 30;
            //Instancia o arrayQuartos, sendo o número de linhas a quantidade de quartos do hotel, e o de colunas a quantidades de dias de uma semana.
            arrayQuartos = new Quarto[20][8];

            //Percorre o arrayQuartos e insere os quartos na primeira coluna com as informações do arquivo.
            while(linha!=null){
            	for(int j = 0; j < quantQuartos; j++){
            		elemento = linha.split("\\|");
                		for(int k = 0; k < elemento.length; k++){
                			Quarto q = new Quarto(Integer.parseInt(elemento[0]), Boolean.parseBoolean(elemento[1]), Boolean.parseBoolean(elemento[2]));
                			arrayQuartos[j][0] = adicionaQuarto(q);
                			linha = br.readLine();
                		}
            	}
            }
            
            //Fecha o arquivo.
            br.close();
        
            //Trata exceção de arquivo inexistente.
            } catch(FileNotFoundException e){
                System.out.println("Arquivo não existe.");
            //Trata outra exceção.
            } catch(Exception e){
                System.out.println("Outro erro.");
            }
        
        return arrayQuartos;    
    }
Rodrigo_Sasaki

Ah, você me sacaneou postando só metade do código hehehe. :slight_smile:

a cada iteração do seu array você está dando um novo readLine(), isso não faz sentido.

o seu readLine tem que estar no seu loop while, não dentro do for.

C

Se eu falar que o que tu falou era o problema, mais eu descobri antes de ler, voce acredita ? :slight_smile:
Agora ta dando !
Quarto [numero=1, suite=true, camaCasal=false]
Quarto [numero=2, suite=true, camaCasal=false]
Quarto [numero=3, suite=true, camaCasal=false]
Quarto [numero=4, suite=true, camaCasal=false]
Quarto [numero=5, suite=true, camaCasal=false]
Quarto [numero=6, suite=true, camaCasal=false]
Quarto [numero=7, suite=true, camaCasal=false]

C

Obrigado pela ajuda ! agora vou lar tentar acabar esse trabalho, abraço.

Criado 28 de setembro de 2012
Ultima resposta 28 de set. de 2012
Respostas 7
Participantes 2