Olá pessoal, no meu pequeno projeto estou imprimindo os cadastros em arquivo.txt dessa forma:
List<String>listaAtor=newArrayList<String>();Filmef=newFilme(0,"","",listaAtor);booleanteste=verificaCampos();if(teste==true){f.setCodigo(Integer.parseInt(tfCodigo.getText()));f.setGenero((String)comboGenero.getSelectedItem());f.setTitulo(tfTitulo.getText());listaAtor.add(tfAtores1.getText());listaAtor.add(tfAtores2.getText());f.setAtores(listaAtor);limparCampos();lista.add(f);try{FileWriterfout=newFileWriter("c:\\filmes.txt",true);PrintWriterpout=newPrintWriter(fout);pout.println(f);}catch(Exceptionex){Logger.getLogger(TelaFilmes.class.getName()).log(Level.SEVERE,null,ex);}}else{JOptionPane.showMessageDialog(null,"Preencha todos os campos");}}
Esta imprimindo utilizando o toString() da minha classe, ok, só que preciso fazer a leitura dessas linhas e uma a uma transformar em um objeto
Filme para inserir certinho na minha jTable…problema que ao ler essas linhas lógicamente vem como Objeto String assim:
FileReaderfin=newFileReader("c:\\filmes.txt");BufferedReaderbuf=newBufferedReader(fin);Stringlinha=buf.readLine();//while para ler todas as linhas do txt
Como farei para “montar” um objeto para cada linha?
Estava pensando em usar os métodos da classe string para separar cada parte da linha e ir alocando no objeto…alguém pode me ajudar?
desde já agradeço
Você pensou da forma correta.
Tem de haver um modo de separar as informações e depois usar um Split, por exemplo, para alocar cada informação no seu devido lugar.
Vamos supor assim:
1,5&AventurasnaSelva&livre
Seria o tempo de duração do filme, título e classificação.
Só exemplo, claro.
diego.sas
E ae, DukeFriend.
Você esta colocando algum separador na hora de salvar o arquivo?
D
DukeFriend
Então, tem um espaço entre cada item…
obrigado
diego.sas
Conforme o nel mencionou você utiliza o split.
FileReader fin = new FileReader("c:\\filmes.txt");
BufferedReader buf = new BufferedReader(fin);
String linha = buf.readLine();//while para ler todas as linhas do txt
String array[] = linha.split(" ");
Vc tera cada campo do seu arquivo dentro de uma posição do array.
So fazer as validações e popular seu bean.
Abraço
D
DukeFriend
Ok, vou tentar…
Valeu nel, valeu Diego…
D
diego123321
Analisando o seu código você está instanciando um objeto do tipo Filme e depois o adiciona a uma ArrayList. Você pode simplemeste salvar a própria lista em um arquivo com extensão (.ser)
publicList<Filme>ler()throwsIOException,ClassNotFoundException{List<Filme>filmes=newArrayList<Filme>();ObjectInputStreamobjectInput=null;if(newFile("c:\\filmes.ser").exists()) { try { FileInputStream input = new FileInputStream("c:\\filmes.ser");objectInput=newObjectInputStream(input);filmes=(List<Filme>)objectInput.readObject();//lendoalistaserializadaobjectInput.close();}catch(FileNotFoundExceptione){}finally{objectInput.close();}}returnfilmes;}
Erro
RAVE: null
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: br.com.Filmes.Filme
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1332)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at java.util.ArrayList.readObject(ArrayList.java:593)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at br.com.Filmes.TelaFilmes.ler(TelaFilmes.java:391)
at br.com.Filmes.TelaFilmes.jButton1ActionPerformed(TelaFilmes.java:407)
at br.com.Filmes.TelaFilmes.access$200(TelaFilmes.java:39)
at br.com.Filmes.TelaFilmes$4.actionPerformed(TelaFilmes.java:181)
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.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
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)
Caused by: java.io.NotSerializableException: br.com.Filmes.Filme
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
at java.util.ArrayList.writeObject(ArrayList.java:570)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
at br.com.Filmes.TelaFilmes.salvar(TelaFilmes.java:346)
at br.com.Filmes.TelaFilmes.executa(TelaFilmes.java:329)
at br.com.Filmes.TelaFilmes.access$700(TelaFilmes.java:39)
at br.com.Filmes.TelaFilmes$9.keyPressed(TelaFilmes.java:310)
at java.awt.Component.processKeyEvent(Component.java:6225)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2801)
at java.awt.Component.processEvent(Component.java:6044)
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.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
at java.awt.Component.dispatchEventImpl(Component.java:4502)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
... 9 more