É possível criar um objeto File a partir de InputStream
121
Existe alguma maneira de criar um java.io.Fileobjeto a partir de um java.io.InputStream?
Minha exigência é ler o Arquivo de um RAR. Não estou tentando escrever um arquivo temporário, tenho um arquivo dentro do arquivo RAR que estou tentando ler.
meu requisito é ler o arquivo de um RAR. Suponha que não estou tentando escrever o arquivo temporário do RAR, dentro do RAR estou tendo um arquivo, só preciso ler.
androidgalaxyman
Eu não entendo a pergunta. Por favor, esclareça. Se você quiser o arquivo original do InputStream, não há um: você está lendo um arquivo RAR, não um arquivo. Se você quiser outra coisa, o quê?
Não foi possível resolver IOUtils no Android Studio e o link que você referiu é um 404.
Shahraiz T.
3
org.apache.directory.studio:org.apache.commons.io precisava ser adicionado como uma dependência. Foi mal. :)
Shahraiz T.
7
Feche corretamente o OutputStream, use um try with resources ou IOUtils.closeQuietly. Eu sei que é apenas um exemplo, mas os iniciantes irão copiá-lo literalmente.
Ele também existe em org.apache.axis2.util com um terceiro parâmetro para a função de cópia. A funcionalidade também funciona lá. Alguma comparação sobre o que usar?
Ridhuvarshan
26
Desde o Java 7, você pode fazer isso em uma linha, mesmo sem usar nenhuma biblioteca externa:
Respostas:
Você precisa criar um novo arquivo e copiar o conteúdo
InputStream
desse arquivo:Estou usando conveniente
IOUtils.copy()
para evitar a cópia manual de fluxos. Também possui buffer embutido.fonte
Em uma linha:
(org.apache.commons.io)
fonte
Crie um arquivo temporário primeiro.
fonte
Desde o Java 7, você pode fazer isso em uma linha, mesmo sem usar nenhuma biblioteca externa:
Veja os documentos da API .
fonte
Se você não quiser usar outra biblioteca, aqui é uma função simples para converter
InputStream
paraOutputStream
.Agora você pode facilmente escrever um
Inputstream
arquivo usandoFileOutputStream
-fonte
Solução Java 11 fácil com bloco try with resources
java.io.InputStream # transferTo está disponível desde Java 9.
fonte
Se estiver usando o Java versão 7 ou superior, você pode usar try-with-resources para fechar o
FileOutputStream
. O código a seguir usaIOUtils.copy()
de commons-io .fonte
try
parte de inicialização são fechados automaticamente quando otry
bloco é encerrado.