Ola galera !!
Estou trabalhando com a classe File porem sou um pouco noob ainda… gostaria da ajuda de vcs com a seguinte situação…
eu tenho um diretorio(pasta)e la dentro contem arquivos… meu método acessa essa pasta e lista informações sobre esses arquivos
o problema que eu tenho que trazer caracteristicas desses arquivos por exemplo: nome ,tamanho,codigo…
consegui até agora trazer o nome pois é o mais intuitivo, porem os outros 4 parametros que necessito trazer estou em duvida de como fazer…
um deles é do tipo data esse nao consigo faze-lo de modo que nao de erro.
Segue o meu código:
privateFT00ResponseVObuildResponse(Stringsource)throwsHandleException{FT00ResponseVOresponseVO=newFT00ResponseVO();responseVO.setCodigoRetorno(0);try{LocalFileUtilfileUtil=newLocalFileUtil(source);List<File>files=fileUtil.getFiles("");byte[]buf=newbyte[1024];intlen=0;log.info("Generating FT00 response object");for(Filefile:files){InputStreamin=null;ByteArrayOutputStreamout=null;try{in=newFileInputStream(file);out=newByteArrayOutputStream();while((len=in.read(buf))>0){out.write(buf,0,len);}out.flush();FT00ArquivoVOarquivoVO=newFT00ArquivoVO();arquivoVO.setNomeArquivo(file.getName());//AKI ESTA CORRETOarquivoVO.setCodigoProduto(file.getPath());//NAO DA ERRO POREM NAO SEI SE FUNCIONAarquivoVO.setTamanho(newString(Base64.encode(out.toByteArray())));//SE NAO ME ENGANO ESSE TRAZ O CONTEUDO.(NECESSITO QUE ELE TRAGA O TAMANHO NAO O CONTEUDO)arquivoVO.setTimestampArquivo(Date(file.getPath()));// NAO FUNCIONA NAO SEI COMO IMPLEMENTARarquivoVO.setTipoCaixaPostal(file.getPath());// NAO DA ERRO POREM NAO SEI COMO IMPLEMENTAR...responseVO.addAllArquivos((List)arquivoVO);}catch(Exceptione){log.warn("Fail to include file "+file.getName()+" in responseVO",e);}finally{try{if(in!=null){in.close();}if(out!=null){out.close();}}catch(IOExceptione){log.warn("Fail to close streams for file "+file.getName(),e);}}}}catch(IntegLayerExceptione){thrownewHandleException(IntegLayerErrorCodes.ERROR_BUILDING_RESPONSE,e);}returnresponseVO;}
cara… todos seus problemas seriam resolvidos se você tivesse procurado o javadoc da classe File… la tem tudo que você ta procurando… dê uma olhada nos métodos aí
pois é brother ja fiz isso… porem nao consegui compreender muito bem os metodos… se algm pudesse me ajudar com quais metodos seriam para cada parametro… fiquei um pouco confuso…abraços
[Editado]
kritiuns, não vi que você tinha respondido. Me desculpe.
juliocesarrosa, se você quer ser um bom desenvolvedor, sugiro começar a entender o JavaDoc. Não é difícil, é só entender inglês e ler com atenção.
J
juliocesarsrosa
Galera nao estou entendendo uma coisa…
arquivoVO.setNomeArquivo(file.getName());//OKarquivoVO.setCodigoProduto(file.getAbsolutePath())//OK;arquivoVO.setTamanho(newLong(file.length()).toString());//OKarquivoVO.setTimestampArquivo(newSimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(newDate(file.lastModified())));//ESSE CARA JA EH DO TIPO DATE E ELE FICA ACUSANDO ERRO NO setTimestampArquivo FALANDO QUE ESTOU PASSANDO STRING , MAS ESTOU PASSANDO DATE E ELE EH DO TIPO DATE ALGM SABE O QUE PODE SER???arquivoVO.setTipoCaixaPostal(file.getPath());
Desculpem algumas duvidas bem bestas pois sou iniciante ainda… obrigado
se a propriedade timestampArquivo for data ele realmente vai acusar isso, porque o método format() do SimpleDateFormat retorna uma string, e não um Date como você esperava, se quiser um Date direto faça assim:
Vlw galera essa parte esta certa ja…
ele verifica o que tem no caminho especificado… pega os arquivos e tras o que é pedido como tamanho dos arquivos,nome e etc…
o que preciso agora é que ele busque nesse diretorio um arquivo de acordo com o especificado, ou seja que ele busque um arquivo especifico que vira
especificado.
ex:usuario escolheu CC=Conta corrente… preciso que ele busque arquivos com o nome/prefixo CC… utilizando aquele mesmo codigo soh que agora ao invés de ser
todos os arquivos como fazia antes preciso que ele pegue apenas os que serão especificados.
privateFT00ResponseVObuildResponse(Stringsource)throwsHandleException{FT00ResponseVOresponseVO=newFT00ResponseVO();FT00ArquivoVOarquivoVO=newFT00ArquivoVO();FT00RequestVOrequestVO=newFT00RequestVO();responseVO.setCodigoRetorno(0);try{LocalFileUtilfileUtil=newLocalFileUtil(source);List<File>files=fileUtil.getFiles("");byte[]buf=newbyte[1024];intlen=0;Stringarmazena=requestVO.getCodigoProduto();log.info("Generating FT00 response object");for(Filefile:files){InputStreamin=null;ByteArrayOutputStreamout=null;try{in=newFileInputStream(file);out=newByteArrayOutputStream();while((len=in.read(buf))>0){// le todos os arquivos do direitorio,pensei em emplementar algo aki pois ai ele só iria ler o que realmente interessa e nao tudo.. ma nao sei como fazer.. }out.write(buf,0,len);}out.flush();file.list().equals(requestVO.getCodigoProduto());//Gostaria de saber se isso funciona??? ele vai me trazer apenas os arquivos que são iguais a Codigo produto???Se não, como faço para trazer de Dentro de file apenas os arquivos que Tenham o prefixo que virá em Codigo produtoarquivoVO.setNomeArquivo(file.getName().equals(requestVO.getCodigoProduto()));//Tentei fazer assim pegando o nome dos arquivos da e depois forçando os a compara-los com o que virá em Codigo Produto.. nao sei se funciona...arquivoVO.setNomeArquivo(file.getName());arquivoVO.setCodigoProduto(file.getAbsolutePath());arquivoVO.setTamanho(newLong(file.length()).toString());arquivoVO.setTimestampArquivo(newDate(file.lastModified()));arquivoVO.setTipoCaixaPostal(file.getPath());responseVO.addAllArquivos((List)arquivoVO);}catch(Exceptione){log.warn("Fail to include file "+file.getName()+" in responseVO",e);}finally{try{if(in!=null){in.close();}if(out!=null){out.close();}}catch(IOExceptione){log.warn("Fail to close streams for file "+file.getName(),e);}}}}catch(IntegLayerExceptione){thrownewHandleException(IntegLayerErrorCodes.ERROR_BUILDING_RESPONSE,e);}returnresponseVO;}Desculpeasduvidasumpoucoprimariassounovonaarea...obrigado
R
Rodrigo_Sasaki
você pode perguntar pelo nome
se for pelo início… igual você exemplificou, a classe String tem métodos que ajudam bastante
pesquise por String.startsWith();
ele testa o começo da string e vê se é igual ao que você quer
J
juliocesarsrosa
Vc poderia me dar um exemplo de como ficaria essa verificação… quanto a sinxate mesmo…
meu fraco é trasnpor em sintaxe… mas li a respeito do método vi que ele testa a sequencia do prefixo… é exatamente o que preciso.
R
Rodrigo_Sasaki
depois do seu flush ali e antes das atribuições… delete aquele equals… e coloque uma linha assim