Comment convertir InputStream en fichier virtuel

J’ai une méthode qui attend que celle de la variable d’entrée soit de type java.io.File mais ce que j’obtiens n’est que InputStream. De plus, je ne peux pas changer la signature de la méthode.

Comment convertir le fichier InputStream en fichier sans écrire le fichier sur le système de fichiers?

Quelque chose comme ça devrait fonctionner. Notez que pour plus de simplicité, j’ai utilisé une fonctionnalité Java 7 (bloc try avec une ressource pouvant être fermée) et IOUtils d’Apache commons-io. Si vous ne pouvez pas les utiliser, ce sera un peu plus long, mais la même idée.

 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 Ssortingng PREFIX = "stream2file"; public static final Ssortingng 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; } } 

Vous ne pouvez pas Le stream d’entrée n’est qu’un stream de données générique et rien ne garantit qu’il provient réellement d’un fichier. Si quelqu’un a créé un InputStream après avoir lu un service Web ou simplement converti une chaîne en un InputStream, il n’y aurait aucun moyen de lier cela à un fichier. Donc, la seule chose que vous pouvez faire est d’écrire des données du stream dans un fichier temporaire (par exemple, en utilisant la méthode File.createTempFile) et de nourrir ce fichier dans votre méthode.