Java.io.EOFException como resolver? [resolvido]

9 respostas
gp7junior
import java.io.File; 
import java.util.ArrayList; 
import java.util.Vector;

public class Programa { 
	private static ArrayList registros = new ArrayList();  
	private Vector idLogs;
	
	public static void main(String[] args) {
		
		MeuArquivo arquivo = new MeuArquivo(new File("U:\pasta\hardware.dat")); 
		// 	ler registros - deixa na memória (manipulação na memória) 
		lerRegistros(arquivo); 
		int opcao = 0; 
		/* 
		 * 	mostra um menu 
		 * 	mantém o arquivo aberto até o usuário sair do sistema 
		 * 
		 */ 
		do { 
			imprimeMenu(); 
			try { 
				opcao = IO.readInt(); 
			} catch (Exception e){ 
				opcao = 0; 
			} 
			if (opcao == 1) 
				inserirRegistro(); 
			else if (opcao == 2) 
				removerRegistro(arquivo); 
			else if (opcao == 3) 
				visualizarRegistro(arquivo); 
			else if (opcao == 4) 
				sair(arquivo); 
			else 
				opcaoInvalida(); 
		} while (opcao != 4); 
		System.out.println("fim!"); 
	} 
	private static void imprimeMenu(){ 
		// 	menu de opções 
		System.out.println("================================"); 
		System.out.println("Opção 1 - Inserir Registro"); 
		System.out.println("Opção 2 - Remover Registro"); 
		System.out.println("Opção 3 - Visualizar Registros"); 
		System.out.println("Opção 4 - Sair"); 
		
		System.out.print("\nOpção: "); 
	} 
	private static void lerRegistros(MeuArquivo arquivo){ 
		registros = arquivo.lerArquivo(); 
	} 
	private static void inserirRegistro(){ 
		int idProduct;
		String toolName; 
		int amount;
		double price;
		System.out.println("\n Inserindo registros");
		System.out.print("Informe o ID da ferramenta: "); 
		idProduct = IO.readInt();		
		System.out.print("Informe o nome da ferramenta: "); 
		toolName = IO.readStr(); 
		System.out.print("Informe a quantidade em estoque: "); 
		amount = IO.readInt(); 
		System.out.print("Informe o preço da ferramenta: "); 
		price = IO.readDouble(); 	
		//if (arquivo.idValidate()){
			Registro reg = new Registro(); 
			reg.setToolName(toolName); 
			reg.setAmount(amount); 
			reg.setIdProduct(idProduct);
			reg.setPrice(price);
			registros.add(reg); 
		//}
		
	} 
	private static void removerRegistro(MeuArquivo arquivo){ 
		System.out.println("\n*** Remover Registros\n"); 
		System.out.println("Informe o Id do registro: "); 
		int id = IO.readInt(); 
		boolean removeu = false; 
		for (int i=0; i<registros.size(); i++){ 
			Registro reg = (Registro)registros.get(i); 
			if (reg.getIdProduct() == id){ 
				registros.remove(i); 
				System.out.println("Registro removido com sucesso!"); 
				removeu = true; 
				break; 
			} 
		} 
		if (! removeu){ 
			System.out.println("Registro nao encontrado!"); 
		} 
	} 
	private static void visualizarRegistro(MeuArquivo arquivo){ 
		System.out.println("\n*** Visualizar Registros\n"); 
		for (int i=0; i><registros.size(); i++){ 
			Registro reg = (Registro)registros.get(i); 
			System.out.println("--------------------------------"); 
			System.out.println(reg.toString()); 
		} 
	} 
	
	private static void sair(MeuArquivo arquivo){ 
		salvar(arquivo); 
	} 
	
	private static void opcaoInvalida(){ 
		System.out.println("ops.. opção inválida! Tente novamente."); 
	} 
	private static void salvar(MeuArquivo arquivo){ 
		arquivo.atualizarRegistros(registros); 
	} 
}

toda vez que tento executar aparece a exceção, e no entanto o programa é executado.

alguem sabe o que esta contecendo?

9 Respostas

KWill

Já que você está manipulando a saida padrão (console), dá para você postar o stacktrace para a gente dar uma olhada?

Ou pelo menos dizer aonde (método, linha…) tá dando erro?

Inté.

ViniGodoy

Uma dúvida… pra que vc usa um Vector? Fique só no ArrayList! É bem melhor!

E o ideal é que a declaração seja (nesse seu caso):

private static List registros = new ArrayList(); private List idLogs;

ViniGodoy

Como faço para rodar sem o arquivo hardware.dat? Pode anexar aí também?

Outra coisa, você está usando Java 5?

Nesse caso seria melhor declarar a lista assim:

List<Registro> registros = new ArrayList<Registro>();

E eliminar boa parte dos casts do seu programa.

gp7junior

ViniGodoy:
Como faço para rodar sem o arquivo hardware.dat? Pode anexar aí também?

E eliminar boa parte dos casts do seu programa.

é muito fácil . nao tem nada dentro do hardware.dat.

é só criar um documento de texto vazio e nomea-lo como hardware.dat

gp7junior

Esse código tá um lixo pessoal.

o primeiro que conseguir executa-lo vai perceber isso.

Vejam que nao importa a opção que lhe é fornecida ele sempre vai imprimir o opção invalida.

gp7junior

Fiz uma reestruturação no código.

não mudou muita coisa mas parece que piorou.

ViniGodoy

Essa é uma versão do programa adaptada para Java 5.
Não consegui reproduzir o erro que você falou.

Adicionei também o teste para ver se o arquivo existe, assim não dá erro caso o arquivo hardware.dat não esteja lá.

Note que, com a classe Scanner, sua classe IO não é mais necessária.

Você está percorrendo as listas com o for, use para isso um iterator.

Substitui o Vector por um ArrayList, e também fiz a declaração dos lists do jeito que te falei ali em cima.

Mudei o nome da classe Registro para Ferramenta. E passei o nome dos métodos para português. Não pense em registros, pense em objetos. No caso do seu problema, os objetos eram as ferramentas.

Dê uma olhada.

gp7junior

ViniGodoy:
Essa é uma versão do programa adaptada para Java 5.
Não consegui reproduzir o erro que você falou.

Adicionei também o teste para ver se o arquivo existe, assim não dá erro caso o arquivo hardware.dat não esteja lá.

Note que, com a classe Scanner…

Dê uma olhada.

Cara ajudou muito.

valeu.

Não sei nem com agradecer.

gp7junior

Como seria fazer este mesmo programa pra rodar na web?
Assim utilizando Servlets.

Por onde eu começo?

Criado 24 de abril de 2007
Ultima resposta 25 de abr. de 2007
Respostas 9
Participantes 3