Fechamento do stream de download com VRaptor

Olá Pessoal!

To fazendo um exemplo de download com VRaptor usando o FileDownload, já que meu arquivo se encontra no disco. Após o download notei que não consigo apagá-lo do disco, é como se estivesse em uso.

Olhando os fontes, percebi que o stream do download não é fechado.

Deve funcionar dessa forma mesmo? Se sim, então se eu quiser apagar o arquivo via sistema, eu devo implementar o download usando diretamente o response?

Valeu galera!

Bom, o FileDownload delega pro InputStreamDownload que usa o ByteStreams.copy, que teoricamente fecha o stream… não deveria dar problema com isso…

será que não tem outro lugar travando o arquivo?

Cara, olhando o fonte do ByteStreams.copy não vi o stream sendo fechado. A versão do Guava que tenho é r07, que já vem como dependência do VRaptor.

Apenas pra conhecimento, o código que vejo é:

public static long copy(InputStream from, OutputStream to)  throws IOException {

    byte[] buf = new byte[BUF_SIZE];
    long total = 0;

    while (true) {
      int r = from.read(buf);
      if (r == -1) {
        break;
      }

      to.write(buf, 0, r);
      total += r;
    }
    return total;
  }

Nem o “from” nem o “to” são fechados.

=(

por favor abra uma issue no VRaptor pra isso:

se quiser corrigir e mandar um pull request tb =)

por enquanto na sua aplicação vc pode copiar essa classe:

e fechar o stream no final.

Blz Lucas! Valeu pela atenção! Vou abrir a issue sim, só não vou garantir o pull request, mas vou fazer o possível!

=)

E aí Lucas, Issue cadastrada e Pull Request enviado.

Valeu!

obrigado!

Ví que o pull-request ainda está aberto, e fiz uns testes com esse teu pull request e funcionou tudo bem.

Não consegui testar esse lance de lock de arquivo porque o Linux não faz esse lock que nem no Windows.

Abraços