Carregar Informações de um arquivo .txt

Olá,

Caros estou com a seguinte dúvida: Es

Estou tendo problema na leitura de um arquivo .txt, onde os arquivos não estão sendo carregados na minha arraylist.

Segue abaixo o código do método Main:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Main {

    public final static String DIRETORIO = "C:/TEMP/Database.txt";
    ArrayList<Dados> dado = new ArrayList<Dados>();

    public void mostraDadosTxt() {
        try {
            FileReader leitor = new FileReader(DIRETORIO);
            BufferedReader leitorBuffer = new BufferedReader(leitor);
            String linha = leitorBuffer.readLine();
            while (linha != null) {
                Dados aluno = new Dados();
                String[] info = linha.split(";");
                aluno.setNome(info[0]);
                aluno.setIdade(Integer.parseInt(info[1]));
                double notas[] = new double[3];
                for (int x = 0; x < 3; x++) {
                    notas[x] = Double.parseDouble(info[x + 2]);
                }
                dado.add(aluno);
            }
            leitorBuffer.close();
            leitor.close();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

    public void mostraDadosTela() {
        String saida = "";
        for (int x = 0; x < dado.size(); x++) {
            saida += "\nNome: " + dado.get(x).getNome()
                    + "\nIdade: " + dado.get(x).getIdade() + "\n ";
        }
        JOptionPane.showMessageDialog(null, saida);
    }

    public static void main(String args[]) {
        new Main();
    }
}

Att.

public static void main(String args[]) { new Main(); }
você construiu um objeto da classe, mas não chamou nenhum método, nem o construtor chamou algum outro método

alPires

Boa tarde !

Fiz algumas modificações na sua classe e acrescente no mesmo arquivo apenas para testar o programa a classe Dados , segue abaixo o codigo comentado:


import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Main {

    public final static String DIRETORIO = "C:/TEMP/Database.txt";
    ArrayList<Dados> dado = new ArrayList<Dados>();

    public void mostraDadosTxt() {
        try {
            FileReader leitor = new FileReader(DIRETORIO);
            BufferedReader leitorBuffer = new BufferedReader(leitor);
            String linha = leitorBuffer.readLine();
            while (linha != null) {
                Dados aluno = new Dados();
                String[] info = linha.split(";");
                aluno.setNome(info[0]);
                aluno.setIdade(Integer.parseInt(info[1]));
                double notas[] = new double[3];
                for (int x = 0; x < 3; x++) {
                    notas[x] = Double.parseDouble(info[x + 2]);
                }
                dado.add(aluno);
				linha = leitorBuffer.readLine(); // !!!! Acrescentei essa linha para ele ler a proxima linha do arquivo !!!!

            }
            leitorBuffer.close();
            leitor.close();
        } catch (Exception e) {
			e.printStackTrace();
            JOptionPane.showMessageDialog(null, e);
        }
    }

    public void mostraDadosTela() {
        String saida = "";
        for (int x = 0; x < dado.size(); x++) {
            saida += "\nNome: " + dado.get(x).getNome()
                    + "\nIdade: " + dado.get(x).getIdade() + "\n ";
        }
        JOptionPane.showMessageDialog(null, saida);
    }

    public static void main(String args[]) {
        Main main = new Main(); 
		main.mostraDadosTxt(); // !!! Chama o metodo mostraDadosTxt
		main.mostraDadosTela(); // !!! Chama o metodo mostraDadosTela
		
    }
}

// Criei apenas para testar o seu codigo.

class Dados {

String nome;
int idade;

	public void setNome(String nome) {
	
		this.nome = nome;
	
	}
	
	public String getNome() {
	
		return this.nome;
	
	}
	
	public void setIdade(int idade) {
	
		this.idade = idade;
	
	}
	
	public int getIdade() {
	
		return this.idade;
	}
	
	
}

Arquivo C:/TEMP/Database.txt que usei para teste:

Rafael Costa Teixeira;29;10;7.5;10
Leonardo Costa Teixeira;19;7.5;7;5
Ralf Costa Teixeira;9;5.0;10;3
Marlene Costa;40;7.5;10;10

Espero ter ajudado.

Primeiramente, muito obrigado pela resposta e pelo auxílio.

Eu gostaria de saber também se é possível fazer de maneira masi automática, de no while, já ler automaricamente a próxima linha, a exemplo de um linha.leitorBuffer.readLine()?

E também, como faço para imprimir a saída de um vetor, por exemplo:

public void mostraDadosTela() {
        String saida = "";
        for (int x = 0; x < dado.size(); x++) {
            saida += "\nNome: " + dado.get(x).getNome()
                    + "\nIdade: " + dado.get(x).getIdade() + "\n ";
        }
        JOptionPane.showMessageDialog(null, saida);
    }

Aqui eu consigo perfeitamente exibir a saída, mas não consigo exibir a saída do vetor Notas. Eu pensei em criar outro for para ler as 3 posições das notas e somar a saida com uma “saidaNotas” por exemplo. Teria como também eu exibir as notas juntamente a essa mesma saida?

Obrigado mais uma vez.

Att.

Primeiramente, muito obrigado pela resposta e pelo auxílio.

Eu gostaria de saber também se é possível fazer de maneira masi automática, de no while, já ler automaricamente a próxima linha, a exemplo de um linha.leitorBuffer.readLine()?

E também, como faço para imprimir a saída de um vetor, por exemplo:

public void mostraDadosTela() {
        String saida = "";
        for (int x = 0; x < dado.size(); x++) {
            saida += "\nNome: " + dado.get(x).getNome()
                    + "\nIdade: " + dado.get(x).getIdade() + "\n ";
        }
        JOptionPane.showMessageDialog(null, saida);
    }

Aqui eu consigo perfeitamente exibir a saída, mas não consigo exibir a saída do vetor Notas. Eu pensei em criar outro for para ler as 3 posições das notas e somar a saida com uma “saidaNotas” por exemplo. Teria como também eu exibir as notas juntamente a essa mesma saida?

Obrigado mais uma vez.

Att.

Primeiramente, muito obrigado pela resposta e pelo auxílio.

Eu gostaria de saber também se é possível fazer de maneira masi automática, de no while, já ler automaricamente a próxima linha, a exemplo de um linha.leitorBuffer.readLine()?

E também, como faço para imprimir a saída de um vetor, por exemplo:

public void mostraDadosTela() {
        String saida = "";
        for (int x = 0; x < dado.size(); x++) {
            saida += "\nNome: " + dado.get(x).getNome()
                    + "\nIdade: " + dado.get(x).getIdade() + "\n ";
        }
        JOptionPane.showMessageDialog(null, saida);
    }

Aqui eu consigo perfeitamente exibir a saída, mas não consigo exibir a saída do vetor Notas. Eu pensei em criar outro for para ler as 3 posições das notas e somar a saida com uma “saidaNotas” por exemplo. Teria como também eu exibir as notas juntamente a essa mesma saida?

Obrigado mais uma vez.

Att.

alPires ,

Efetuei mais algumas modificações , acredito que agora ficou melhor:


import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Main {

    public final static String DIRETORIO = "C:/TEMP/Database.txt";
    ArrayList<Dados> dado = new ArrayList<Dados>();

    public void mostraDadosTxt() {
        try {
            FileReader leitor = new FileReader(DIRETORIO);
            BufferedReader leitorBuffer = new BufferedReader(leitor);
            String linha = "";
			double somaNotas = 0;
			
            while ( ( linha = leitorBuffer.readLine() ) != null ) {  // !!!! Acrescentei essa linha no WHILE para ele ler a proxima linha do arquivo !!!!
			
                Dados aluno = new Dados();
                String[] info = linha.split(";");
                aluno.setNome(info[0]);
                aluno.setIdade(Integer.parseInt(info[1]));
                double notas[] = new double[3];
				
                for (int x = 0; x < 3; x++) {
				
                    notas[x] = Double.parseDouble(info[x + 2]);
					aluno.addNota(notas[x]); //adiciona uma nota
					somaNotas = somaNotas + notas[x]; // Soma as notas
					aluno.setNotaTotal(somaNotas); // Armazena a nota total no objeto aluno
                }
				somaNotas = 0; // zera a soma das notas
                dado.add(aluno);
				

            }
            leitorBuffer.close();
            leitor.close();
        } catch (Exception e) {
			e.printStackTrace();
            JOptionPane.showMessageDialog(null, e);
        }
    }

    public void mostraDadosTela() {
        String saida = "";
        for (int x = 0; x < dado.size(); x++) {
            saida += "\nNome: " + dado.get(x).getNome()
                    + "\nIdade: " + dado.get(x).getIdade()
					+ "\n 1ª Nota:" + dado.get(x).getNota(0)
					+ "\n 2ª Nota:" + dado.get(x).getNota(1)
					+ "\n 3ª Nota:" + dado.get(x).getNota(2)
					 + "\nNota Total:" + dado.get(x).getNotaTotal()
					  + "\n";
        }
        JOptionPane.showMessageDialog(null, saida);
    }

    public static void main(String args[]) {
        Main main = new Main(); 
		main.mostraDadosTxt(); // !!! Chama o metodo mostraDadosTxt
		main.mostraDadosTela(); // !!! Chama o metodo mostraDadosTela
		
    }
}

// Criei apenas para testar o seu codigo.

class Dados {

String nome;
int idade;
double notaTotal;
ArrayList<Double> arrayNotas;

	public Dados() {
	
		arrayNotas = new ArrayList<Double>();
		
	}
	public void setNome(String nome) {
	
		this.nome = nome;
	
	}
	
	public String getNome() {
	
		return this.nome;
	
	}
	
	public void setIdade(int idade) {
	
		this.idade = idade;
	
	}
	
	public int getIdade() {
	
		return this.idade;
	}
	
	public void addNota(double nota) {
	
	arrayNotas.add(nota);
	
	}
	
	public double getNota(int posicao) {
	
	return arrayNotas.get(posicao);
	
	}
	public void setNotaTotal(double nota) {
	
		this.notaTotal = nota;
	}
	
	public double getNotaTotal() {
	
		return this.notaTotal;
	}
	
}

Qualquer duvida posta ai.

Segue um exemplo de ler os arquivos de um diretório

https://sites.google.com/site/lucasportela/home/java/lerarquivosdeumapasta