J'ai une méthode qui attend que celle de la variable d'entrée soit de type java.io.File mais ce que je reçois est seulement InputStream. Je ne peux pas changer la signature de la méthode. Comment est-ce que je peux convertir le InputStream dans le type de Fichier sans réellement écrire le dossier sur le système de fichiers?.Comment convertir InputStream en fichier virtuel
Répondre
Quelque chose comme ça devrait fonctionner. Notez que pour simplifier, j'ai utilisé une fonctionnalité Java 7 (essayez le bloc avec une ressource pouvant être fermée), et IOUtils depuis Apache commons-io. Si vous ne pouvez pas utiliser ceux-ci, 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 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;
}
}
Est-ce que createTempFile n'écrit pas réellement un vrai fichier, que vous pouvez voir dans le système de fichiers? –
vous êtes techniquement correct. en utilisant le code ci-dessus, le fichier temporaire existera jusqu'à ce que le programme se termine ou il est supprimé par le programme. – cobbzilla
Les docs de deleteOnExit disent que vous ne devriez pas compter dessus pour fonctionner (et je pense que ça ne fait même rien): http://developer.android.com/reference/java/io/File.html#deleteOnExit(). En outre, si vous savez comment diffuser l'audio en lecture, sans aucun fichier, s'il vous plaît écrivez à ce sujet ici: http://stackoverflow.com/q/36552381/878126 –
Vous ne pouvez pas. Le flux d'entrée est juste un flux générique de données et il n'y a aucune garantie qu'il provient réellement d'un fichier. Si quelqu'un créait un InputStream à partir de la lecture d'un service Web ou venait de convertir un String en InputStream, il n'y aurait aucun moyen de le lier à un fichier. Ainsi, la seule chose que vous pouvez faire est d'écrire des données du flux dans un fichier temporaire (par exemple en utilisant la méthode File.createTempFile) et de charger ce fichier dans votre méthode.
En effet, le fichier ['File # createTempFile()'] (http://download.oracle.com/javase/6/docs/api/java/io/File .html # createTempFile% 28java.lang.String,% 20java.lang.String% 29) est vraiment votre meilleur pari. – BalusC
Voir aussi ['Fichier # deleteOnExit()'] (http://download.oracle.com/javase/6/docs/api/java/io/File.html#deleteOnExit%28%29), ce qui provoque la JVM pour tenter de supprimer le fichier automatiquement lorsque la JVM se ferme. Bien sûr, il est préférable de supprimer le fichier temporaire manuellement et immédiatement, une fois que vous savez que le fichier n'est plus nécessaire et n'est plus utilisé. Mais dans un monde imparfait, des solutions parfois imparfaites sont nécessaires. –
- 1. Comment convertir un InputStream en DataHandler?
- 2. Convertir InputStream (Image) en ByteArrayInputStream
- 3. Comment convertir un InputStream en String en Java?
- 4. Télécharger un fichier en utilisant inputstream dans GAE java
- 5. Conversion de BlackBerry InputStream en chaîne
- 6. En Java, comment convertir un InputStream en un tableau d'octets (byte [])?
- 7. fichier virtuel? en c/C++ ou C#
- 8. Peut-on convertir un tableau d'octets en un InputStream en Java?
- 9. convertir le chemin virtuel en chemin Web réel dans ASP.NET
- 10. Implémentation d'un fichier virtuel en remplaçant l'API de fichier Win32
- 11. Comment convertir un fichier System.Web.HttpPostedFileBase en System.Web.HttpPostedFile?
- 12. Comment convertir le fichier * .txt en Unicode
- 13. java: comment convertir un fichier en utf8
- 14. Comment convertir mon fichier .htaccess en NGINX?
- 15. Convertir InputStream en chaîne avec l'encodage donné dans les données de flux
- 16. Inputstream to BufferedImage La conversion endommage le fichier
- 17. swiftmailer :: Envoie un fichier virtuel?
- 18. Convertir un objet en fichier
- 19. Chemin d'accès/nom de fichier à partir de InputStream
- 20. Obtenir FileSize avant InputStream
- 21. Android AssetManager/InputStream Exception
- 22. Comment convertir le fichier NSMutableArray en fichier CSV sur iPhone?
- 23. Comment faire pour convertir le fichier Excel en fichier mdf
- 24. comment convertir le fichier MID en fichier wav?
- 25. Comment convertir un fichier cdt géré en fichier makefile?
- 26. Comment convertir n'importe quel fichier .htc en fichier .js?
- 27. Copie Http Request InputStream
- 28. Cache le contenu de KeyStore et le convertit en InputStream
- 29. Java Process Bogue InputStream?
- 30. Comment convertir un fichier en mémoire en un tableau d'octets?
Est-ce une fonction intégrée? ou est-ce une fonction personnalisée? –
@Richard: * "Je ne peux pas changer la signature de la méthode." * – BalusC
Pourquoi avez-vous exactement besoin d'un objet 'File' au lieu de InputStream? – Poindexter