[AJUDA] Ler ficheiro CSV

2 respostas
N

Boa noite!

Estou a tentar ler um ficheiro excell CSV com esta formatação:

Numero;Ano
1111111;1
2222222;2
3333333;3

O problema é que o programa dá-me este erro:

[list]9/Jun/2011 21:08:32 lapr2_lerficheiros.InterfaceGrafica$1 actionPerformed
SEVERE: null
java.io.FileNotFoundException: LEI_ALUNOS_2009_2010.csv (O sistema não conseguiu localizar o ficheiro especificado)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:106)
at java.util.Scanner.(Scanner.java:636)
at lapr2_lerficheiros.LeituraAlunos.lerFicheiro(LeituraAlunos.java:36)
at lapr2_lerficheiros.InterfaceGrafica$1.actionPerformed(InterfaceGrafica.java:52)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
[/list]

Código da minha GUI
JMenuItem jmiLerFicheiro = new JMenuItem("Ler", 'L');
        jmiLerFicheiro.setAccelerator(KeyStroke.getKeyStroke("ctrl L"));
        jmiLerFicheiro.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    LeituraAlunos la = new LeituraAlunos();
                    MeuLinkedList m = la.lerFicheiro();//linha 52
                    la.gravarFicheiro(m, "Alunos");
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(InterfaceGrafica.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });

Código do método que lê ficheiro:

@Override
    public MeuLinkedList lerFicheiro() throws FileNotFoundException {
        String[] dados;

        JFileChooser jfcLerFicheiro = new JFileChooser();
        jfcLerFicheiro.setDialogTitle("Escolha um ficheiro CSV de alunos a carregar");
        int returnVal = jfcLerFicheiro.showOpenDialog(jfcLerFicheiro);
        if (returnVal == JFileChooser.APPROVE_OPTION) {

            Scanner in = new Scanner(new File(jfcLerFicheiro.getSelectedFile().getName()));//linha 36
            dados = in.nextLine().split(";");

            try {
                if (dados[0].equalsIgnoreCase("Numero")) {
                    alunosCSV = new MeuLinkedList();

                    while (in.hasNextLine()) {
                        dados = in.nextLine().split(";");
                        alunosCSV.add(new Aluno(Integer.parseInt(dados[0]), Integer.parseInt(dados[1])));
                    }
                    in.close();
                }
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage() + "\nTem de seleccionar um ficheiro com o nome LEI_ALUNOS");
            }
        }
        return alunosCSV;
    }

Alguém pode ajudar?

Obrigado e Abraço

2 Respostas

kenneth

Fala brow,

O erro esta aqui

java.io.FileNotFoundException: LEI_ALUNOS_2009_2010.csv (O sistema não conseguiu localizar o ficheiro especificado)

A questao nao eh o formato, mas sim que o sistema nao esta encontrando o arquivo.

Qual sistema operacional voce esta usando?

Abraco.

N

Estou a usar o windows7.

Mudei a leitura do Scanner para o BufferedReader e pelo menos já não gera o erro.

O problema é que eu queria ver se se estava a receber alguma coisa do ficheiro para o MeuLinkedList e mando fazer um varrimento com para tentar mostrar a toString() e não gera nada.
Já utilizei ArrayList em vez do MeuLinkedList (modificando os métodos claro) e não existe qualquer tipo de output.

Meus métodos de leitura e escrita:
public class LeituraAlunos implements LeituraInterface, Serializable {

    /**
     * Método que lê o ficheiro CSV da lista de Alunos
     * @return Retorna um LinkedList com a informação do ficheiro lida
     * @throws FileNotFoundException
     */
    @Override
    public MeuLinkedList lerFicheiroCSV() throws FileNotFoundException {
        String[] dados;
        MeuLinkedList alunosCSV = new MeuLinkedList();
        
        JFileChooser jfcLerFicheiro = new JFileChooser();
        jfcLerFicheiro.setDialogTitle("Escolha um ficheiro CSV de alunos a carregar");
        int returnVal = jfcLerFicheiro.showOpenDialog(jfcLerFicheiro);
        if (returnVal == JFileChooser.APPROVE_OPTION) {

            BufferedReader in = new BufferedReader(new FileReader(jfcLerFicheiro.getSelectedFile().getName()));

            try {
                dados = in.readLine().split(";");

                if (dados[0].equalsIgnoreCase("Numero")) {

                    while (in.readLine() != null) {
                        dados = in.readLine().split(";");
                        alunosCSV.add(new Aluno(Integer.parseInt(dados[0]), Integer.parseInt(dados[1])));
                    }

                    in.close();
                }

            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage() + "\nTem de seleccionar um ficheiro com o nome LEI_ALUNOS");
            }
        }
        return alunosCSV;
    }

    /**
     * Método que escreve no ficheiro Alunos.bin a lista de alunos salva
     * @param alunos LinkedList da lista de alunos
     * @param nomeFicheiro Nome do ficheiro a salvar
     * @throws FileNotFoundException
     */
    @Override
    public void gravarFicheiro(MeuLinkedList alunos, String nomeFicheiro) throws FileNotFoundException {
        try {
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(nomeFicheiro));
            out.writeObject(alunos);
            out.close();
        } catch (IOException ex) {
        }
    }

    /**
     * Método que carrega as listas de alunos gravadas no ficheiro Alunos.bin
     * @param alunos LinkedList da lista de alunos
     * @param nomeFicheiro Nome do ficheiro a salvar
     * @return
     */
    public MeuLinkedList carregarAlunosDoFicheiro(MeuLinkedList alunos, String nomeFicheiro) {
        //remove todas as listas de alunos gravadas no LinkedList para não termos dados repetidos
        for (int i = 0; i < alunos.size(); i++) {
            alunos.remove(i);
        }

        //faz a leitura da informação do ficheiro
        try {
            ObjectInputStream in = new ObjectInputStream(new FileInputStream("Alunos.bin"));
            alunos = (MeuLinkedList) in.readObject();
            in.close();
        } catch (ClassNotFoundException ex) {
        } catch (IOException ex) {
        }
        return alunos;
    }
Código que chama esses métodos na minha GUI:
jmiLerFicheiro.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    LeituraAlunos la = new LeituraAlunos();
                    MeuLinkedList m = new MeuLinkedList();
                    m = la.lerFicheiroCSV();//linha 52
                    la.gravarFicheiro(m, "Alunos.bin");
                    m = la.carregarAlunosDoFicheiro(m, "Alunos.bin");
                    for (int i = 0; i < m.size(); i++) {
                        m.toString();
                    }
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(InterfaceGrafica.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });

Cumprimentos

Criado 9 de junho de 2011
Ultima resposta 10 de jun. de 2011
Respostas 2
Participantes 2