Problema com EOFException

1 resposta
S

Bom, eu criei uma classe Palavra, com duas variaveis de instancia: nome e descricao. Criei um ArrayList e mandei um ObjectOutputStream, a partir dum FileOutputStream, salvar essa ArrayList num arquivo palavras.dat.
Ok, até ai tudo certo. Mas o problema é quando eu vo ler desse arquivo. Quando eu mando ArrayList palavras = (ArrayList) oLerPalavras.readObject();, da uma EOFException.
Já tentei resolver, mas não to conseguindo.

Segue abaixo o código:

package Leitor;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

import Dicionario.Palavra;

public class LeitorFinal {
	private static FileInputStream fLerIndice;
	private static FileInputStream fLerDescricao;
	private static ObjectInputStream oLerIndice;
	private static ObjectInputStream oLerDescricao;
	private static ArrayList<String> listaIndice;
	private static ArrayList<String> listaDescricao;
	private static ArrayList<Palavra> palavras;
	private static FileOutputStream fGravarPalavras;
	private static ObjectOutputStream oGravarPalavras;
	
	public static void main(String[] args) {
		File indice = new File("G:/trabalho dicionario/indice2.dat");
		File descricao = new File("G:/trabalho dicionario/descricao.dat");
		File palavra = new File("G:/trabalho dicionario/palavras.dat");
		try{
			fLerIndice = new FileInputStream(indice);
			fLerDescricao = new FileInputStream(descricao);
			oLerIndice = new ObjectInputStream(fLerIndice);
			oLerDescricao = new ObjectInputStream(fLerDescricao);
			listaIndice = (ArrayList<String>) oLerIndice.readObject();
			listaDescricao = (ArrayList<String>) oLerDescricao.readObject();
			palavras = new ArrayList<Palavra>();
			for(int i=0; i<listaIndice.size(); i++){
				Palavra p = new Palavra(listaIndice.get(i), listaDescricao.get(i));
				palavras.add(p);
			}			
			fGravarPalavras = new FileOutputStream(palavra, false);
			oGravarPalavras = new ObjectOutputStream(fGravarPalavras);
			oGravarPalavras.writeObject(palavras);
			oGravarPalavras.flush();
			oGravarPalavras.close();
		}
		catch(Exception e){
			System.out.println("exceção1");
		}
		
	}

}
package Dicionario;

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class BancoDeDados {
	private FileInputStream fLerPalavras;
	private ObjectInputStream oLerPalavras;
	private FileOutputStream fGravarPalavras;
	private ObjectOutputStream oGravarPalavras;
	private File palavrasFile;
	private ArrayList<Palavra> palavras;
	
	public BancoDeDados(){
		palavrasFile = new File("palavras.dat");
		try{
			fLerPalavras = new FileInputStream(palavrasFile);
			oLerPalavras = new ObjectInputStream(fLerPalavras);
			fGravarPalavras = new FileOutputStream(palavrasFile, false);
			oGravarPalavras = new ObjectOutputStream(fGravarPalavras);
		}
		catch(Exception e){
			JOptionPane.showMessageDialog(null, "Erro ao iniciar banco de dados. Certifique-se que o arquivo palavras.dat esteja no mesmo diretório do programa. Fechando programa...");
			System.exit(0);
		}
		ler();
	}
	
	public void ler(){
		try {
			palavras = (ArrayList<Palavra>) oLerPalavras.readObject();
		}		
		catch(Exception e){
			JOptionPane.showMessageDialog(null, "Erro ao iniciar banco de dados. Certifique-se que o arquivo palavras.dat esteja no mesmo diretório do programa. Fechando programa...");
			System.exit(0);
		}
	}
	public void gravar(){
		try{
			oGravarPalavras.writeObject(palavras);
			oGravarPalavras.flush();
			oGravarPalavras.close();
		}
		catch(Exception e){
			JOptionPane.showMessageDialog(null, "Erro ao gravar no banco de dados. Certifique-se que o arquivo palavras.dat esteja no mesmo diretório do programa.");
		}
	}
	public void addPalavra(String nome, String descricao){
		Palavra p = new Palavra(nome, descricao);
		palavras.add(p);
	}
	public int sizePalavra(){
		return palavras.size();
	}
	public Palavra getPalavra(int i){
		return palavras.get(i);
	}
}

O erro tá no método ler() em "palavras = (ArrayList) oLerPalavras.readObject();".

Obrigado desde já. :]

1 Resposta

S

Ah… no caso, eu mando salvar o arquivo naquela pasta, no meu pen drive. Copio ele pro diretorio certo, do BancoDeDados, e então executo o BancoDeDados.
Obrigado.

Criado 29 de outubro de 2009
Ultima resposta 29 de out. de 2009
Respostas 1
Participantes 1