Manipulação de arquivo em memória

3 respostas
M

Caros amigos,

Tenho uma API que faz o download de um arquivo (planilha excel) da WEB  este arquivo (apache poi) e criar alguns objetos que depois serão persistidos. A API funciona perfeitamente o único inconveniente é que tenho que baixar o arquivo para meu micro e depois manipulá-lo. Preciso que isso seja feito em memória, sem ter que salvar o arquivo no micro, pois vou colocar a API em um programa que vai para a WEB. Como fazer? Quais problemas posso ter em relação e memória, pois agora vou manipular o arquivo em memória.

A lógica que uso é a seguinte:

SERVIÇO:

...
try
{
  File arq = CarregarArquivoCotacao (tipo.getNomeArquivo(), 2012);			

  FileInputStream fileInputStream = new FileInputStream(arq);
			
  ... manipulação do fileInputStream usando POI...
			
  arq.delete();
}
catch (Exception e)
{
  e.getMessage();
}
...

MÉTODO PARA CARREGAR O ARQUIVO:

...
private File CarregarArquivoCotacao (String nomeArquivo, Integer ano)
{
	String complementoURL = "/" + ano.toString() + "/" + "historico" + nomeArquivo + "_" + ano.toString() + ".xls";

	String localFileName = "historico" + nomeArquivo + "_" + ano.toString() + ".xls";
	
	String localPath = "/Users/marcelomagalhaes/Desktop/";
	
	return util.Util.doDownload(URL_TESOURO_DIRETO + complementoURL, localPath + localFileName);
}
...

FAZER O DOWNLOAD:

...
public static File doDownload(String stringUrl, String pathLocal)
{  
    try {  
      
        //Encapsula a URL num objeto java.net.URL 
        URL url = new URL(stringUrl);  
	          
       //Cria streams de leitura (este metodo ja faz a conexao)...  
        InputStream is = url.openStream();  
	  
        //... e de escrita.  
        FileOutputStream fos = new FileOutputStream(pathLocal);
	  
        //Le e grava byte a byte. Voce pode (e deve) usar buffers para  
        //melhor performance (BufferedReader).  
        int umByte = 0;  
        while ((umByte = is.read()) != -1)
        {  
            fos.write(umByte);  
        }  
	  
        //Nao se esqueca de sempre fechar as streams apos seu uso!  
        is.close();  
        fos.close();  
	  
        //apos criar o arquivo fisico, retorna referencia para o mesmo
        return new File(pathLocal); 
	         
}
catch (Exception e)
{  
	//Lembre-se de tratar bem suas excecoes, ou elas tambem lhe tratarão mal!  
	//Aqui so vamos mostrar o stack no stderr.  
	 e.printStackTrace();  
}  
	         
return null;  
}
...

Abraços a todos.
May the force be with us.

3 Respostas

A

Não seria apenas não gravar o arquivo em disco, após o download ?

se vc tem :

//Cria streams de leitura (este metodo ja faz a conexao)...    
InputStream is = url.openStream();

não seria só trasformar seu inputStream numa String e manipular ?

M

aix:
Não seria apenas não gravar o arquivo em disco, após o download ?

se vc tem :

//Cria streams de leitura (este metodo ja faz a conexao)...    
InputStream is = url.openStream();

não seria só trasformar seu inputStream numa String e manipular ?

Tem horas que não enxergamos o que está diante dos olhos!!! :shock: Valeu!!! Funcionou…

M

mas essa API server apenas para Excel?.. Ou serve para o .doc e docx?

Criado 12 de maio de 2012
Ultima resposta 3 de mai. de 2013
Respostas 3
Participantes 3