Bom, estou fazendo uma atividade onde devo trabalhar com Arquivo de acesso aleatorio. O programa é para cdastras alunos de uma escola e ter um menu simples com opções(Ainda estou usando o JOptionPane) para ser mais rapido.
tenho minha classe com os atributos de aluno.
package CadastroAlunos;
public class Aluno {
private String nome;
private String cpf;
private long ra;
private String curso;
public Aluno(String nome, String cpf, long ra, String curso) {
this.nome = nome;
this.cpf = cpf;
this.ra = ra;
this.curso = curso;
}
public Aluno() {
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public long getRa() {
return ra;
}
public void setRa(long ra) {
this.ra = ra;
}
public String getCurso() {
return curso;
}
public void setCurso(String curso) {
this.curso = curso;
}
public String imprimirDadosAluno() {
return "Nome: " + this.nome + " \tCPF: " + this.cpf + "\nRegistro de Aluno: " + this.ra + " \tCurso: " + this.curso;
}
}
Minha classe de teste com o menu de opções:
package CadastroAlunos;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.JOptionPane;
public class TestaAluno {
public static void main(String[] args) throws FileNotFoundException, IOException {
Aluno aluno;
int opcao;
do {
opcao = Integer.parseInt(JOptionPane.showInputDialog(
"1 - Cadastrar Aluno\n"
+ "2 - Buscar Aluno\n"
+ "3 - Imprime dados de todos os alunos\n"
+ "4 - Salva dados de todos os alunos \n"
+ "5 - Lê os dados de todos os alunos\n"
+ "6 - Sair\n"
+ "Escolha uma opcao:"));
switch (opcao) {
case 1:
aluno = new Aluno();
aluno.setNome(JOptionPane.showInputDialog("Nome:"));
aluno.setCpf(JOptionPane.showInputDialog("CPF:"));
aluno.setRa(Long.parseLong(JOptionPane.showInputDialog("RA:")));
aluno.setCurso(JOptionPane.showInputDialog("Curso:"));
GerenciaAlunos.insereAluno(aluno);
break;
case 2:
long ra = Long.parseLong(JOptionPane.showInputDialog("Entre com RA:"));
JOptionPane.showMessageDialog(null, GerenciaAlunos.buscaAluno(ra));
break;
case 3:
JOptionPane.showMessageDialog(null,GerenciaAlunos.imprimeDadosTodosAlunos());
break;
case 4:
GerenciaAlunos.salvaTodosAlunos();
JOptionPane.showMessageDialog(null,"Arquivos Salvos");
break;
case 5:
JOptionPane.showMessageDialog(null,GerenciaAlunos.leTodosAlunos());
break;
case 6:
System.exit(0);
break;
default:
System.exit(0);
break;
}
} while (true);
}
}
Meu problema é o seguinte,crio um arraylist para armazenar todos os alunos e dados cadastrados. Depois percorro esse arraylist e armazeno em um arquivo de acesso aleatorio “aluno.txt”. Porém, o exercicio pede para eu percorrer esse arquivo e salvar as informações novamente no arrayList (Imagino que terá informações repetidas mas isso não é o ponto).
Não estou sabendo por onde acertar para que meus ponteiros de leitura do RandomAcessFile para que ele capture todos os dados independentes do tamanho. Estou salvando cada dado em uma linha para ver se facilita. Alguem poderia me ajudar? Dicas de melhoria no codigo, principalmente a parte de RandomAcessFile será muito bem vinda. Segue codigo:
package CadastroAlunos;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class GerenciaAlunos {
private static ArrayList<Aluno> aluno = new ArrayList<>();
static public void insereAluno(Aluno a) {
aluno.add(a);
}
static public String buscaAluno(long ra) {
String alunos = "";
for (Aluno a : aluno) {
if (a.getRa() == ra) {
alunos = a.imprimirDadosAluno();
break;
} else {
alunos = "Aluno não cadastrado!";
}
}
return alunos;
}
static public String imprimeDadosTodosAlunos() {
String alunos = "";
for (Aluno a : aluno) {
alunos += a.imprimirDadosAluno() + "\n";
}
return alunos;
}
static public void salvaTodosAlunos() {
RandomAccessFile rm;
try {
rm = new RandomAccessFile(new File("aluno.txt"), "rw");
for (Aluno a : aluno) {
byte x1[] = (String.valueOf(a.getNome() + "\r\n").getBytes());
rm.write(x1);
byte x2[] = (String.valueOf(a.getCpf() + "\r\n").getBytes());
rm.write(x2);
byte x3[] = (String.valueOf(a.getRa() + "\r\n").getBytes());
rm.write(x3);
byte x4[] = (String.valueOf(a.getCurso() + "\r\n").getBytes());
rm.write(x4);
}
rm.close();
} catch (FileNotFoundException e) {
System.out.println("File not found exception");
} catch (IOException e) {
System.out.println("IO Exception");
}
}
// o que eu estou fazendo !?
static public String leTodosAlunos() {
String nome = "";
String cpf = "";
long ra = 0;
String curso = "";
try {
RandomAccessFile read = new RandomAccessFile(new File("aluno.txt"), "r");
for (Aluno a : aluno) {
}
} catch (FileNotFoundException e) {
System.out.println("Arquivo não encontrado.");
} catch (IOException ex) {
}
return imprimeDadosTodosAlunos();
}
}