Passando objeto.toString() para um ficheiro

2 respostas
mxajd

Boa noite pexoal do GUJ

Estou tentando criar uma classe que cadastra alunos e no final em vez de criar um array para guardar o cadastro, quero guardar cada cadastro em um ficheiro, podendo esse mesmo ficheiro ser incrementado, de modo que não perca os cadastros anteriores. O código é esse:
public class MainAluno {

    public static void main(String[] args) throws IOException {

        boolean dadosCorrectos = false;
        String nomeI = "",
                apelidoI = "";
        int anoI = 0,
                anoCursoI = 0;
        int confirma;

        do {
            confirma = JOptionPane.showConfirmDialog(null, "Promete"
                    + " inserir bem os dados? Nada de graçolas. Ao "
                    + "clicar em <YES> está a dizer que entendeu "
                    + "o que leu e que não vai "
                    + "inserir dados errados");
        } while (confirma != 0);

        int opccao = Integer.parseInt(JOptionPane.showInputDialog(null, "Que "
                + "tipo de Aluno quer criar?\n*********************************"
                + "********\n"
                + "** 1)  Interno    |--|    2)  Transferido **\n"
                + "*****************************************"));
        switch (opccao) {
            case 1:

                do {
                    dadosCorrectos = true;
                    try {
                        nomeI = JOptionPane.showInputDialog("Nome do aluno:");
                        apelidoI = JOptionPane.showInputDialog("Apelido "
                                + "do aluno:");
//                        if (nomeI.matches(".*[\\d].*")) {
//                            dadosCorrectos = false;
//                            JOptionPane.showMessageDialog(null, "Nome não pode possuir números");
//                        }
                        for (int i = 0; i < nomeI.length(); i++) {
                            if (nomeI.charAt(i) >= '0'
                                    && nomeI.charAt(i) <= '9') {
                                JOptionPane.showMessageDialog(null, "Nome "
                                        + "!= {0...9} ");
                                dadosCorrectos = false;
                                break;
                            }
                        }
                        for (int j = 0; j < apelidoI.length(); j++) {
                            if (apelidoI.charAt(j) >= '0'
                                    && apelidoI.charAt(j) <= '9') {
                                JOptionPane.showMessageDialog(null, "Apelido "
                                        + "!= {0...9} ");
                                dadosCorrectos = false;
                                break;
                            }
                        }

                        do {
                            anoI = Integer.parseInt(JOptionPane.showInputDialog(""
                                    + "Ano de Inscrição (de 1977 a 2011) "
                                    + "de " + nomeI));
                        } while ((confirma <= 1977) && (confirma >= 2011));

                        do {
                            anoCursoI = Integer.parseInt(JOptionPane.showInputDialog("Ano de "
                                    + "Curso (de 1 a 5) de " + nomeI));
                        } while ((confirma <= 1) && (confirma >= 5)
                                && (confirma != 0));
                    } catch (NumberFormatException e) {
                        dadosCorrectos = false;
                        JOptionPane.showMessageDialog(null, "Tem "
                                + "que ser um número");
                    }
                } while (!dadosCorrectos);

                AlunoInterno alInt1 = new AlunoInterno(nomeI, apelidoI, anoI, anoCursoI);

                System.out.println(alInt1);

                JOptionPane.showMessageDialog(
                        null, alInt1);
                alInt1.calcularAnosInscricao(anoI);

//                DataOutputStream out = new DataOutputStream(new FileOutputStream("teste.txt", true));
//                out.write(JOptionPane.showMessageDialog(null, alInt1));
                break;

            case 2:
                String escolaT = JOptionPane.showInputDialog("Nome da escola de origem");
                String nomeT = JOptionPane.showInputDialog("Nome do aluno:");
                String apelidoT = JOptionPane.showInputDialog("Apelido do aluno:");
                int anoT = Integer.parseInt(JOptionPane.showInputDialog("Ano de Inscrição de " + nomeT));
                int anoCursoT = Integer.parseInt(JOptionPane.showInputDialog("Ano de Curso de " + nomeT));
                Alunotransferido alTra1 = new Alunotransferido(nomeT, apelidoT, anoT, anoCursoT, escolaT);

                System.out.println(alTra1);

                JOptionPane.showMessageDialog(
                        null, alTra1);
                alTra1.calcularAnosTransferido(anoT);


                break;
        }
//        File temp = new File("teste.txt");
//        FileWriter escreve = new FileWriter("teste.txt", true);
//        PrintWriter oksai=new PrintWriter(escreve);
//        oksai.println(alInt1);

Depois disso tenho a dizer que na superclasse tem um número de aluno que incrementa quando crio cada aluno. Poderei guardar os cadastros num ficheiro, fechar o IDE e quando voltar a abrir, criar novos alunos e o numero continuar de onde parou? :roll:

Vlw

2 Respostas

ViniGodoy
  1. Esqueça o toString(). Ele é feito para mostrar um texto sobre o objeto, mas não necessariamente esse texto contém todas as informações necessárias para um ficheiro.
  2. Se quiseres usar um ficheiro binário, leia sobre as classes DataInputStream e DataOutputStream;
  3. Se quiseres usar um ficheiro textual, leia sobre as classes PrintWriter e FileReader;

Para aprendizado, não tente usar ainda o ObjectOutputStream e o ObjectInputStream. Se optares por elas, estude sobre o conceito de serialização.

mxajd
<blockquote><div class="quote-author">ViniGodoy:</div>1. Esqueça o toString(). Ele é feito para mostrar um texto sobre o objeto, mas não necessariamente esse texto contém todas as informações necessárias para um ficheiro.

2. Se quiseres usar um ficheiro binário, leia sobre as classes DataInputStream e DataOutputStream;

3. Se quiseres usar um ficheiro textual, leia sobre as classes PrintWriter e FileReader;

Para aprendizado, não tente usar ainda o ObjectOutputStream e o ObjectInputStream. Se optares por elas, estude sobre o conceito de serialização.

Olá ViniGodoy

Mas foi isso precisamente que tentei fazer. porém na hora de escrever para o ficheiro os dados de cadastro, não consigo fazê-lo. E é nisso que tenho dúvida:

File temp = new File("teste.txt"); FileWriter escreve = new FileWriter("teste.txt", true); PrintWriter oksai=new PrintWriter(escreve); oksai.println(alInt1);
Esse código é o que está nas linhas 104 a 108 do que enviei.

Criado 11 de janeiro de 2012
Ultima resposta 12 de jan. de 2012
Respostas 2
Participantes 2