Comment convertir InputStream de Fichier virtuel
J'ai une méthode qui s'attend à celui de la variable d'entrée de java.io.Type de fichier mais ce que je reçois est seulement InputStream. Aussi, je ne peux pas changer la signature de la méthode.
Comment puis-je convertir l'InputStream dans type de Fichier sans vraiment l'écriture du fichier sur le système de fichiers?
- Est-ce une fonction intégrée? ou est-ce une fonction personnalisée?
- "Je ne peux pas changer la signature de la méthode."
- Exactement pourquoi avez-vous besoin d'une
File
objet au lieu de l'InputStream? - Je ne peux pas utiliser InputStream parce que l'API, je suis en utilisant des mandats de Fichier
- Me semble que quelqu'un a conçu une fracture de l'API qui n'accepte que des fichiers au lieu de les InputStreams, et maintenant vous devez utiliser cette API
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme cela devrait fonctionner. Notez que pour des raisons de simplicité, j'ai utilisé un Java 7 fonctionnalité (bloc try avec fermer la ressource), et IOUtils de Apache commons-io. Si vous ne pouvez pas utiliser ceux qu'il sera un peu plus long, mais la même idée.
deleteOnExit
comme un supplément de santé mentale-vérifier, ne jamais compter sur elle sans condition. Je sais que dans certaines situations (kill -9
la JVM, par exemple), l'arrêt de crochets effectuer la suppression ne sera jamais appelé.implementation 'org.apache.directory.studio:org.apache.commons.io:2.4'
de gradle.Vous ne pouvez pas. Le flux d'entrée est seulement un générique flux de données, et il n'y a aucune garantie que cela provient d'un Fichier. Si quelqu'un a créé un InputStream à partir de la lecture d'un service web ou tout simplement converti en une Chaîne de caractères dans un InputStream, il n'y aurait aucun moyen de le relier à un fichier. La seule chose que vous pouvez faire est d'écrire des données dans le flux dans un fichier temporaire (par exemple, en utilisant le Fichier.createTempFile méthode) et de les nourrir de ce fichier dans votre méthode.
File#createTempFile()
c'est vraiment votre meilleur pari.File#deleteOnExit()
, ce qui provoque la JVM pour essayer de supprimer le fichier automatiquement lorsque la JVM sorties. Bien sûr, il est préférable de supprimer les fichiers temporaires manuellement et immédiatement, une fois que vous savez le fichier n'est plus nécessaire et n'est plus en usage. Mais dans un monde imparfait, parfois imparfaite des solutions sont nécessaires.