Buffer na geração de arquivo

gente,

tenho uma lista de objetos, ai gero um arquivo a partir dela. Quando vou em outra lista e peço pra gerar o arquivo de novo… aparece os objetos da antiga :frowning: aff… já limpei praticamente tudo… e não acho o problema. Segue o cod:[code]InputStream is = getClass().getClassLoader().getResourceAsStream(“geraArq/gerado.txt”);

        if(is!=null){
         byte[] b = inputStreamToBytes(is);       
        
	ServletOutputStream out = response.getOutputStream(); 		                	
	              		                	 
	response.reset(); 
	response.setHeader("Content-Disposition", "attachment;filename=lista.txt");
	response.setContentType("Application/txt");
	response.setContentLength(b.length);
	              
            
	out.write(b); 
	out.flush(); 
	out.close();	
            b = null;
            to_file.delete();
            response.flushBuffer();
            is.reset();
            is.close();
            form = null;[/code]

Certifique de que:

  1. Você está lendo o mesmo arquivo que está gravando;
  2. As classes usam o mesmo classloader;
  3. Seu arquivo não é read-only.

Uma maneira relativamente fácil de se fazer isso é imprimir a URL do getResource() para ver se imprimem a mesma coisa.

Olá ViniGodoy,

1- O arquivo eu apago, logo após gerá-lo.
2- Como assim as classes usam o mesmo ClassLoader?
3-Toda vez que ele pega a lista ele gera um novo arquivo… na hora de fazer o download ele só gera certo se for a primeira vez do cara… Na segunda tentativa de gerar… não funciona, só gera o antigo.

Como faria pra imprimir o getResource?

Obrigado

Pode ser realmente algum cache em seu servidor, ou algo ainda mais nebuloso. Talvez alguém que conheça mais de web do que eu (e isso não é muito difícil de se achar) possa ter alguma sacada melhor.

Mas, explicando:

Alguns servidores trabalham com mais de um class loader. O classloader é a classe responsável por manter a lista de quais classes estão disponíveis para uso (quer dizer, em quais classes você pode ou não dar um new). É ele que, por exemplo, carrega um arquivo .jar e torna as classes dentro dele disponíveis.

Se você estiver com dois classloaders, com endereços relativos diferentes, o seu getResourceAsStream poderá estar retornando textos diferentes. Acho pouco provável, pois você deveria ter o mesmo arquivo nos dois endereços, mas esse é o tipo de erro que dá muita dor de cabeça as vezes.

Para imprimir o caminho gerado, para dar um System.out.println ou equivalente no que retorna a partir do getResourceAsStream.