Cómo convertir InputStream a un archivo virtual

Tengo un método que espera que la variable de entrada sea de tipo java.io.File, pero lo que obtengo es solo InputStream. Además, no puedo cambiar la firma del método.

¿Cómo puedo convertir InputStream en tipo de archivo sin escribir el archivo en el sistema de archivos?

Algo como esto debería funcionar. Tenga en cuenta que, para mayor simplicidad, he utilizado una característica de Java 7 (bloque de prueba con recurso de cierre) e IOUtils de Apache commons-io. Si no puedes usarlos, será un poco más largo, pero la misma idea.

 import org.apache.commons.io.IOUtils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class StreamUtil { public static final String PREFIX = "stream2file"; public static final String SUFFIX = ".tmp"; public static File stream2file (InputStream in) throws IOException { final File tempFile = File.createTempFile(PREFIX, SUFFIX); tempFile.deleteOnExit(); try (FileOutputStream out = new FileOutputStream(tempFile)) { IOUtils.copy(in, out); } return tempFile; } } 

No puedes. La secuencia de entrada es solo una secuencia genérica de datos y no hay garantía de que realmente se origine en un archivo. Si alguien creaba un InputStream leyendo un servicio web o simplemente convertía un String en un InputStream, no habría forma de vincularlo a un archivo. Entonces, lo único que puede hacer es escribir datos de la secuencia en un archivo temporal (por ejemplo, utilizando el método File.createTempFile) y alimentar este archivo en su método.