Erro ao tentar salvar os dados em um arquivo

11 respostas
R

Estou tentando fazer uma aplicação Desktop sem usar banco de dados, portanto, salvarei os dados em um arquivo. Na hora em que eu clico no botão salvar ele abre a tela para o usuário escolher o nome do arquivo, quando o usuário escolhe o nome e clica em Save aparece “Dados cadastrados com sucesso!”. Porém, quando eu abro o txt para ver os dados, aparece só isso… Ԁ
Por que não está salvando meus dados ? Abaixo está o código do método salvar():

private boolean salvar()
    {
        arquivoescolhido = new JFileChooser();
        arquivoescolhido.setFileSelectionMode(JFileChooser.FILES_ONLY);

        int resultado = arquivoescolhido.showSaveDialog(this);

        if(resultado==JFileChooser.CANCEL_OPTION)
            return false;

        nomearquivo = arquivoescolhido.getSelectedFile();

        if(nomearquivo == null || nomearquivo.getName().equals(""))
        {
            JOptionPane.showMessageDialog(this, "Nome de arquivo inválido!", "Nome de arquivo inválido!", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        else
        {
            try
            {
                saida = new ObjectOutputStream(new FileOutputStream(nomearquivo));
                return true;
            }
            catch(IOException e)
            {
                return false;
            }
        }
    }

11 Respostas

E

Você sabe o que é um ObjectOutputStream?

R

Na verdade não. Fiz esse método baseado em um exemplo do JAVA: Como Programar 4ª edição.

C

Ae blz ?!?!
da uma olhadinha nesse tutorial
acho q vai te ajudar…

http://www.guj.com.br/article.show.logic?id=13

qlq problema posta ai

Flw

R

O método que salva os dados funcionou :smiley: Mas agora o problema é no método que lê os dados. O método salvar eu fiz assim:

FileWriter fw = new FileWriter(nomearquivo,true);
PrintWriter pw = new PrintWriter(fw,true);
pw.print(nometxt.getText()+", ");
pw.println(enderecotxt.getText());
fw.close();
pw.close();

E o método para ler os dados estou fazendo assim:

private void abrir()
    {
        arquivoescolhido = new JFileChooser();
        arquivoescolhido.setFileSelectionMode(JFileChooser.FILES_ONLY);

        int resultado = arquivoescolhido.showOpenDialog(this);

        if(resultado==JFileChooser.CANCEL_OPTION)
            return;

        nomearquivo = arquivoescolhido.getSelectedFile();

        if(nomearquivo == null || nomearquivo.getName().equals(""))
            JOptionPane.showMessageDialog(this, "Nome de arquivo inválido!", "Nome de arquivo inválido!", JOptionPane.ERROR_MESSAGE);
        else
        {
            try
            {
                FileReader fr = new FileReader(nomearquivo);
                BufferedReader br = new BufferedReader(fr);

                String linha="";
                while((linha = br.readLine()))
                {
                    System.out.println("Linha: "+linha);
                }
            }
            catch(IOException e)
            {
                JOptionPane.showMessageDialog(this, "Erro ao abrir o arquivo!", "Erro!", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

No comando while((linha = br.readLine())) dá erro, e quando eu coloco while((linha == br.readLine())) roda o programa, mas em System.out.println("Linha: "+linha); não imprime nada. Onde está o erro desta vez ?

kemperacc
BufferedReader br = new BufferedReader(new FileReader(nomearquivo));  
   
             String linha="";  
             while(linha!=null ) {  
                 linha = br.readLine();

                 if (linha!=null){
                         System.out.println("Linha: "+linha);  
                 }
             }
R

Valeu, funcionou! :smiley: Agora preciso de mais uma ajuda. Eu sou programador PHP, e não conheço tanto de JAVA. No PHP existe uma função chamada implode, que pega uma String e a joga toda num array, usando um separador específico, por exemplo:

$frase="Como, fazer, implode, em, JAVA"; $vetfrase = implode($frase,",");
Com este código, o vetor $vetfrase fica assim…
$vetfrase[0]=“Como”;
$vetfrase[1]=" fazer";
$vetfrase[2]=" implode";
$vetfrase[3]=" em";
$vetfrase[4]=" JAVA";

Vocês sabem de uma função em JAVA que faça a mesma coisa ?

Gerson_da_S_Lima

String string = “Como, fazer, implode, em, JAVA”;

String[] vetor = string.split(",");

vetor[0] = “Como” …

R

Não funcionou :frowning: Eu fiz assim:

try
                    {
                        FileReader fr = new FileReader(nomearquivo);
                        BufferedReader br = new BufferedReader(fr);
                        String linha="";
                        while(linha!=null)
                        {
                            linha = br.readLine();
                            if (linha!=null)
                            {
                                String vet[] = linha.split(linha, ',');
                                System.out.println("Linha: "+linha);
                                for(int a=0;a<vet.length;a++)
                                {
                                    System.out.println(vet[a]);
                                }
                            }
                        }
                    }
                    catch(IOException e)
                    {
                        JOptionPane.showMessageDialog(this, "Erro ao abrir o arquivo!", "Erro!", JOptionPane.ERROR_MESSAGE);
                    }

Quando eu mando rodar, aparece: Linha: a,b,c,d,e
Mas não aparece: a
b
c
d
e

Gerson_da_S_Lima

Não sei o que pode ter acontecido, não to com tempo pra testar, mas veja que deu certo, só não apareceu a letra a, então tenta debugar teu código e vê o que tá errado. Raciocionar é um hábito básico de todo programador :).

R

Acho que você não entendeu. O que eu quis dizer, foi que apareceu isso:
Linha: a,b,c,d,e
que corresponde a testa linha:

System.out.println("Linha: "+linha);

Porém, não apareceu desta forma: a
b
c
d
e
que corresponderia a este bloco de código:

String vet[] = linha.split(linha, ',');
System.out.println("Linha: "+linha);
for(int a=0;a<vet.length;a++)
{
    System.out.println(vet[a]);  
}

Ou seja… uma parte do código funcionou e outra não.

Eu inclusive tentei usar a classe StringTokenizer, assim:

StringTokenizer st = new StringTokenizer(linha,",");
while(st.hasMoreTokens())
{
    String dado = st.nextToken();
    System.out.println("Dado: "+dado);
}

Mas também não funcionou :?

R
try
                {
                    FileReader fr = new FileReader(nomearquivo);
                    BufferedReader br = new BufferedReader(fr);
                    String linha = "";
                    String[] vet = null;
                    int a = 0;
                    while(linha!=null)
                    {
                        linha = br.readLine();
                        StringTokenizer st = new StringTokenizer(linha,",");
                        while(st.hasMoreTokens())
                        {
                            vet[a] = st.nextToken(); // (Exercicio.java:229)
                            System.out.println(vet[a]);
                            a++;
                        }
                    }
                }
                catch(IOException e)
                {
                    JOptionPane.showMessageDialog(this, "Erro ao abrir o arquivo!", "Erro!", JOptionPane.ERROR_MESSAGE);
                }
Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at exercicio1.Exercicio.abrir(Exercicio.java:229)

at exercicio1.Exercicio.access$800(Exercicio.java:25)

at exercicio1.Exercicio$3.actionPerformed(Exercicio.java:125)

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:1216)

at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1257)

at java.awt.Component.processMouseEvent(Component.java:6038)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5803)

at java.awt.Container.processEvent(Container.java:2058)

at java.awt.Component.dispatchEventImpl(Component.java:4410)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2429)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)
Criado 9 de março de 2010
Ultima resposta 10 de mar. de 2010
Respostas 11
Participantes 5