Download de Arquivos (File)[RESOLVIDO]

ola galera… !!!

estou com um problema…
estou implemetando um download de arquivo…
esses arquivos ficam um uma pasta em um diretorio… logo faço uma comparação se o nome do arquivo requerido for igual ao nome do
arquivo que estiver no diretorio tenho que pegar esse arquivo e devolvelo no “arquivoRetorno”.
porem nao sei como faço para pegar o arquivo em si… sou novo em java tenho bastante duvidas ainda
… segue o meu código comentado…


private FT05ResponseVO buildResponse(String source) throws HandleException {
		
		FT05ResponseVO responseVO = new FT05ResponseVO();	
		FT05RequestVO requestVO = new FT05RequestVO();
		responseVO.setCodigoRetorno(0);

		try {
			LocalFileUtil fileUtil = new LocalFileUtil(source);
			List<File> files = fileUtil.getFiles("");

			byte[] buf = new byte[1024];
			int len = 0;
			
			log.info("Generating FT00 response object");

			for (File file: files) {
				
				InputStream in = null;
				ByteArrayOutputStream out = null;
				
				try {
					in = new FileInputStream(file);
					out = new ByteArrayOutputStream(); 
					
					while ((len = in.read(buf)) > 0){//vasculho o diretorio inteiro
						out.write(buf, 0, len);
						out.flush();
						
						
						if(file.getName().equals(requestVO.getNomeArquivo())){//se o nome encontrado no diretorio for igual ao que eu procuro ...
													
							file.??????? nao sei como pegar o arquivo...  				
													
						}
					}

				     responseVO.getArquivoRetorno(//aqui vira o arquivo);
				     
				} catch (Exception e) {
					log.warn("Fail to include file " + file.getName() + " in responseVO", e);
				} finally {
					try {
						if (in != null) {
							in.close();
						}
						if (out != null) {
							out.close();
						}
					} catch (IOException e) {
						log.warn("Fail to close streams for file " + file.getName(), e);
					}
				}
			}
		} catch (IntegLayerException e) {
			throw new HandleException(IntegLayerErrorCodes.ERROR_BUILDING_RESPONSE, e);
		}
		
		return responseVO;
	}

vlw galera obrigado descupem pela duvida primaria…

não sei o que é requestVO e responseVO mas por que você não simplesmente instancia um novo File com o caminho do arquivo que você encontrou e retorna ele ?

hunm… request e response … significa envio e retorno mesmo nada que influencie… esqueçamos essa parte…

poderia me dar um exemplo de como ficaria amigo ???

grato !!

instanciar um File?

File fileEncontrado = new File(file.getAbsolutePath());

EDIT: agora eu percebi que pelo laço, a instância seria perdida ao sair do if…
então você pode colocar a linha

responseVO.getArquivoRetorno(//aqui vira o arquivo);   

dentro do if no seu while, e quebrar o laço quando encontrar o que quer…
não sei se é viável ou nem se é a melhor maneira hehe

Sim axo que entendi agora…

ele corre o diretorio no while… e depois no if eu faço uma comparação rpa ver se tem algm com o mesmo nome…
caso tenha eu instancio File pegando getAbsolutePath() …

e depois jogo no meu arquivo de retorno é isso ???

obrigado

sim, mas cuidado com o escopo da variável… caso ela seja instanciada dentro do if ou do while… e você tentar utilizá-la depois da execução dos mesmos, você terá problemas :wink:

vlw brother vou reestruturar isso estou indo agora…
talvez se restar alguma duvida postarei amanhan de manhan obrigado pela atenção!

abraços

opa… sem problemas…

se resolvi sua dúvida, coloque um [RESOLVIDO] no título la, fazendo favor…
senão continue postando aqui hehe

e aew !!! estou com um outro problema… agora…

eu pego o arquivo de um diretorio dou um encode em base 64 nele e depois tenho que devolver o arquivo no “set” do response
vou comentar essa parte… porem o setArquivoRetorno é do tipo String e preciso retornar um file… estou em duvida como fazer agora…
nao sei como retornar… na verdade nao sei mais o que retornar … acabei me perdendo no meu próprio código…
sou novo em java e me confundo muito ainda…

nao sei mais se estou retornando o conteudo do arquivo ou se estou retornando o arquivo em si…

preciso retornar o arquivo ja em base 64.encode

vlwww

private FT05ResponseVO buildResponse(String source, FT05RequestVO requestVO) throws HandleException {
		
		FT05ResponseVO responseVO = new FT05ResponseVO();	
		responseVO.setCodigoRetorno(0);
	

		try {
			LocalFileUtil fileUtil = new LocalFileUtil(source);
			List<File> files = fileUtil.getFiles("");

			byte[] buf = new byte[1024];
			int len = 0;
			
			log.info("Generating FT00 response object");

			for (File file: files) {
				
				InputStream in = null;
				ByteArrayOutputStream out = null;
				
				try {
					in = new FileInputStream(file);
					out = new ByteArrayOutputStream(); 
					
					while ((len = in.read(buf)) > 0){
						out.write(buf, 0, len);
						out.flush();
						
						if(file.getName().contains(requestVO.getNomeArquivo())){
							byte buffer[] = new byte[(int) file.length()];  						
							BufferedInputStream input = new BufferedInputStream(new FileInputStream(file.getAbsolutePath()));  
							String arquivo = Base64.encode(buf);
							input.read(buffer, 0, buffer.length);  
			                                input.close();  
			            		              		

			                responseVO.setArquivoRetorno(arquivo);//aqui preciso retornar o arquivo em base64.encode , mas acho que estou retornando o seu conteudo...
vlwww
						}
				
					}


				     
				} catch (Exception e) {

				} finally {
					try {
						if (in != null) {
							in.close();
						}
						if (out != null) {
							out.close();
						}
					} catch (IOException e) {
						log.warn("Fail to close streams for file " + file.getName(), e);
					}
				}
			}
		} catch (IntegLayerException e) {
			throw new HandleException(IntegLayerErrorCodes.ERROR_BUILDING_RESPONSE, e);
		}
		
		return responseVO;
	}

[quote=juliocesarsrosa]ola galera… !!!

estou com um problema…
estou implemetando um download de arquivo…
esses arquivos ficam um uma pasta em um diretorio… logo faço uma comparação se o nome do arquivo requerido for igual ao nome do
arquivo que estiver no diretorio tenho que pegar esse arquivo e devolvelo no “arquivoRetorno”.
porem nao sei como faço para pegar o arquivo em si… sou novo em java tenho bastante duvidas ainda
… segue o meu código comentado…


private FT05ResponseVO buildResponse(String source) throws HandleException {
		
		FT05ResponseVO responseVO = new FT05ResponseVO();	
		FT05RequestVO requestVO = new FT05RequestVO();
		responseVO.setCodigoRetorno(0);

		try {
			LocalFileUtil fileUtil = new LocalFileUtil(source);
			List<File> files = fileUtil.getFiles("");

			byte[] buf = new byte[1024];
			int len = 0;
			
			log.info("Generating FT00 response object");

			for (File file: files) {
				
				InputStream in = null;
				ByteArrayOutputStream out = null;
				
				try {
					in = new FileInputStream(file);
					out = new ByteArrayOutputStream(); 
					
					while ((len = in.read(buf)) > 0){//vasculho o diretorio inteiro
						out.write(buf, 0, len);
						out.flush();
						
						
						if(file.getName().equals(requestVO.getNomeArquivo())){//se o nome encontrado no diretorio for igual ao que eu procuro ...
													
							file.??????? nao sei como pegar o arquivo...  				
													
						}
					}

				     responseVO.getArquivoRetorno(//aqui vira o arquivo);
				     
				} catch (Exception e) {
					log.warn("Fail to include file " + file.getName() + " in responseVO", e);
				} finally {
					try {
						if (in != null) {
							in.close();
						}
						if (out != null) {
							out.close();
						}
					} catch (IOException e) {
						log.warn("Fail to close streams for file " + file.getName(), e);
					}
				}
			}
		} catch (IntegLayerException e) {
			throw new HandleException(IntegLayerErrorCodes.ERROR_BUILDING_RESPONSE, e);
		}
		
		return responseVO;
	}

vlw galera obrigado descupem pela duvida primaria…[/quote]

então… só pra dizer mesmo

quando for colocar o [RESOLVIDO] no título… edite o seu primeiro post do tópico… não o último, senão não adianta heheh, não aparece na lista dos tópícos