Java.io.EOFException como resolver? [resolvido]



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?

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é.

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;

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.

[quote=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.[/quote]

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

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

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.

Fiz uma reestruturação no código.

não mudou muita coisa mas parece que piorou.

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.

[quote=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. [/quote]

Cara ajudou muito.

valeu.

Não sei nem com agradecer.

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

Por onde eu começo?