[RESOLVIDO] Erro ao ler Arquivo TXT

3 respostas Resolvido
java
P

Olá. Ao fazer o “split” das linhas do arquivo TXT, surge um caracter estranho logo no início da 1ª linha lida. Isto está impedindo a contagem correta dos dados (parte final de cada linha. P.Ex.: Tenho 9 linhas e a rotina só conta 8, ou seja, só conta a partir da linha 2 em diante. Não sei como resolver.

Estrutura do arquivo txt:

PALAVRA1#100#Dica_01#-20#Dica_02#-30#Dica_03#-50#1
PALAVRA2#100#Dica_01#-10#Dica_02#-30#Dica_03#-40#1
PALAVRA3#100#Dica_01#-30#Dica_02#-30#Dica_03#-30#2
PALAVRA4#100#Dica_01#-20#Dica_02#-30#Dica_03#-50#1
PALAVRA5#100#Dica_01#-10#Dica_02#-20#Dica_03#-40#3
PALAVRA6#100#Dica_01#-10#Dica_02#-20#Dica_03#-30#3
PALAVRA7#100#Dica_01#-10#Dica_02#-20#Dica_03#-40#2
PALAVRA8#100#Dica_01#-30#Dica_02#-20#Dica_03#-40#1
PALAVRA9#100#Dica_01#-20#Dica_02#-20#Dica_03#-40#3

Rotina de Leitura e contagem:

//=============================
public void ContarNiveis() {
    if (lblnCategorias.getText()!="00000") {
        try {
            File f = new File(caminho + "//" + ComboCategoria.getSelectedItem() + ".txt");
            FileReader fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);
            matNivel.clear();               //limpa o temporaio que aramzena o nível
            int n = 0; String valor = null;
            while (bfr.ready()) {           //ler até o final do arquivo
                matNivel.add(bfr.readLine());
                qtdeNiveis++; n++;
            }
            String linha = null;
            qtdeNiveis = 0; facil = 0; medio = 0; dificil = 0;
            for (int i=0;i <= matNivel.size();i++) {
                linha = (String)matNivel.get(i);
                String colunas[] = linha.split("#");
                String dado = colunas[8];
                if ( dado.equals("1")) {
                    facil++;        }
                if ( dado.equals("2")) {
                    medio++;        }
                if ( dado.equals("3")) {
                    dificil++;        }
            }
                
            lblmsgJogador.setVisible(true);
            if ((facil + medio + dificil) < 0) {
                lblmsgJogador.setForeground(Color.red);
                lblmsgJogador.setText(NomeJogador + " este não parece ser arquivo de Palvras!");
            } else {
                lblmsgJogador.setForeground(Color.white);
                lblmsgJogador.setText(NomeJogador + " escolha o Nível (Fácil, Médio ou Difícil)");

                lblFacil.setText(df.format(facil));
                lblMedio.setText(df.format(medio));
                lblDificil.setText(df.format(dificil));

                controlaBtnNivel();
            }

            lblnPalavras.setText(df.format(qtdeNiveis ));
        }
        catch(IOException ex) {
            System.out.println("Erro: "+ ex.toString());
        }
    }
}
//=============================

Obrigado por qualquer ajuda, ou dica para resolver.

3 Respostas

R
Solucao aceita

Creio que deveria ser assim:

FileReader fr = new FileReader(f);
      BufferedReader bfr = new BufferedReader(fr);
      String linha = bfr.readLine(); //lê a primeira linha
      while (linha != null) {
        linha = lerArq.readLine(); //lê a segunda linha até a última
      }
P

Hei Abner, muito obrigado mais uma vez, funcionou direitinho,
mas agora tenho outro erro. kkkkkk
Quando comparo o ArrayList para fazer a contagem:

for (int i=0;i <= matNivel.size();i++) {
                if (matNivel.get(i).equals(1)) {
                    facil++;
                }
                if (matNivel.get(i).equals(2)) {
                    medio++;
                }
                if (matNivel.get(i).equals(3)) {
                    dificil++;
                }
            }

Da erro. Como posso ler o que foi guardado no Arraylist para efetuar a contagem?
ou seja, os dados estão no arrray (matNivel) como posso fazer a contagem, Qual é o formato ou como recuperar do array?

P

Blz. Funcionou direitinho agora.
Ficou assim:

public void ContarNiveis() {
    if (lblnCategorias.getText()!="00000") {
        BufferedReader br = null;
        try {
            File f = new File(caminho + "//" + ComboCategoria.getSelectedItem() + ".txt");
            FileReader fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);
            String linha = bfr.readLine(); //lê a primeira linha
            int n= 0;
            while (linha != null) {
                String[] lido = linha.split("#");
                matNivel.add(lido[8]);
                linha = bfr.readLine(); //lê a segunda linha até a última
                n++;
            }
            for (int i=0;i < matNivel.size();i++) {
                String dado = (String) matNivel.get(i);
                if (dado.equals("1")) {facil++;       }
                if (dado.equals("2")) {medio++;       }
                if (dado.equals("3")) {dificil++;     }
            }
        } catch (IOException ex) {
            System.out.println("" + ex);
        }
        carregaValoresDeNivel();
    }
}
Criado 3 de fevereiro de 2019
Ultima resposta 4 de fev. de 2019
Respostas 3
Participantes 2