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