Desserialização

Boa tarde a todos!
Me chamo João e estou com um problema para desserializar um objeto.
Tenho um programa que grava normalmente os objetos que estão em uma ArrayList (de acordo com a quantidade de elementos inseridos) mas quando eu abro o programa para ler os arquivos ele não sabe até onde parar, ou lê certa quantidade definida por mim ou lê diversos elementos (mesmo não tendo). [b]Preciso que ele leia e jogue no array somente aquilo que possuir.[/b] Nada a menos nada a mais. Como fazer esta “parada”?

Obrigado.

	ObjectInputStream in;
	try {
		in = new ObjectInputStream(new FileInputStream(System
				.getProperty("user.dir")
				+ File.separator + "Chamado.bin"));
		arrayChamado.add((Chamado) in.readObject());
		i++;
		//				arrayChamado.add((Chamado) in.readObject());
		//				i++;

	} catch (Exception e) {
		e.printStackTrace();
	}

Esse exemplo deve te ajudar:

public class Teste implements java.io.Serializable{   
	
	private String var1;
	private String var2;
	private int idade;
	
	public void setVar1(String var1) {
		this.var1 = var1;
	}
	public String getVar1() {
		return var1;
	}
	public String setVar2() {
		return var2;
	}
	public String getVar2() {
		return var2;
	}
	
	private void setIdate(int idade) {
	     this.idade = idade;
	} 
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Teste object = new Teste();
		
		object.setVar1("Variavel1");
		object.setVar1("Variavel2");
		
		
	    try {   
	        // Serialize to a file   
	        ObjectOutput out = new ObjectOutputStream(new FileOutputStream("filename.ser"));   
	        out.writeObject(object);   
	        out.close();   
	        
	      
	    } catch (IOException e) {   
	    }  

	    Deserializar();
	}
	
	
	
	
	public static void Deserializar(){
		
		Teste obj = null;
		int x = 0;
		
		x = -1;
				 
		try {   
	        
			// Deserialize from a file   
	        File file = new File("filename.ser");   
	        ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));   
	        // Deserialize the object   
	        obj = (Teste) in.readObject();   
	        in.close();   
	        
	    } catch (ClassNotFoundException e) {   
	    
	    } catch (IOException e) {   
	    
	    }  
	    
	    System.out.println("Seu objeto de volta: "+obj.getVar1());
	    
	    
	}
	


}

Sim, isso é o que estou fazendo. O que preciso é jogar tudo que tem no arquivo serializado para um objeto que vai para ArrayList. Por isso preciso de um ponto de parada para não colocar NULL no arrayList. Qual seria? Você sabe? :frowning:

joão, acho que o “ponto de parada” que vc se refere é a quantidade de arquivos existentes no diretório “user.dir”.

List listaArquivos = listarArquivosDiretorio(pathDoDiretorioUserDir)

aqui vc recupera a quantidade de arquivos

int numArquivos = listaArquivos.size();

esse método lista todos os arquivos do diretório.
obs: prefiro trabalhar com List do que array

[code] /**
* Lista todos os arquivos do diretório informado
* Retorna um java.util.List
*
* @param diretorio
* @return
*/
public static List listarArquivosDiretorio(File diretorio) {

	lista = new ArrayList<File>();

	if ((diretorio.exists()) && (diretorio.isDirectory())) {
		File[] arquivos = diretorio.listFiles();
		if (arquivos != null) {
			for (int i = 0; i < arquivos.length; i++) {
				lista.add(arquivos[i]);
			}
		}
	}
	return lista;
}[/code]

esse método lê o conteúdo do arquivo

[code] /**
* Lê o conteúdo serializado de um arquivo.
*
* @param nomeArquivoComDiretorio
*/
public static Object lerObjetoSerializado(String nomeArquivoComDiretorio) {

	File arquivo = new File(nomeArquivoComDiretorio);
	FileInputStream fis;
	Object objeto = null;

	try {
		fis = new FileInputStream(arquivo);
		ObjectInputStream os = new ObjectInputStream(fis);
		objeto = os.readObject();
		os.close();
	} catch (ClassNotFoundException e) {
		e.printStackTrace();

	} catch (IOException e) {
		e.printStackTrace();
	}
	return objeto;
}[/code]

Prezados,
Quebrei a cabeça um pouco aqui e tive a idéia de colocar um variável booleana temProximo dizendo que há um próximo elemento ou não, sendo que toda vez que dou um new no objeto o mesmo é instanciado com FALSE.
MUITO obrigado pela ajuda de vocês e vou tentar utilizar o código que me passou acima.

Valeu!!!
João.