¿Hay alguna forma de crear un java.io.File
objeto a partir de unjava.io.InputStream
?
Mi requisito es leer el archivo de un RAR. No estoy tratando de escribir un archivo temporal, tengo un archivo dentro del archivo RAR que estoy tratando de leer.
Respuestas:
Necesita crear un nuevo archivo y copiar el contenido de
InputStream
ese archivo:Estoy usando conveniente
IOUtils.copy()
para evitar la copia manual de transmisiones. También tiene almacenamiento en búfer incorporado.fuente
En una línea:
(org.apache.commons.io)
fuente
Primero cree un archivo temporal.
fuente
Desde Java 7, puede hacerlo en una línea incluso sin usar bibliotecas externas:
Consulte los documentos de la API .
fuente
Si no desea utilizar otra biblioteca, aquí hay una función simple para convertir
InputStream
aOutputStream
.Ahora puede escribir fácilmente un
Inputstream
archivo usandoFileOutputStream
-fuente
Solución fácil de Java 11 con prueba con bloque de recursos
java.io.InputStream # transferTo está disponible desde Java 9.
fuente
Si está utilizando Java versión 7 o superior, puede utilizar try-with-resources para cerrar correctamente el archivo
FileOutputStream
. El siguiente código se usaIOUtils.copy()
de commons-io .fuente
try
parte de inicialización se cierran automáticamente cuando se sale deltry
bloque.