Est-il possible de créer un objet File à partir d'InputStream
124
Existe-t-il un moyen de créer un java.io.Fileobjet à partir d'un java.io.InputStream?
Mon exigence est de lire le fichier à partir d'un RAR. Je n'essaye pas d'écrire un fichier temporaire, j'ai un fichier dans l'archive RAR que j'essaie de lire.
mon exigence est de lire le fichier à partir d'un RAR. Supposons que je n'essaye pas d'écrire le fichier temporaire à partir du RAR, à l'intérieur de RAR, j'ai un fichier, j'ai juste besoin de lire.
androidgalaxyman
Je ne comprends pas la question. Précisez s'il vous plaît. Si vous voulez que le fichier original provienne d'InputStream, il n'y en a pas eu: vous lisez un fichier RAR, pas un fichier. Si vous voulez autre chose, quoi?
Impossible de résoudre les IOUtils dans Android Studio et le lien que vous avez référencé est un 404.
Shahraiz T.
3
org.apache.directory.studio:org.apache.commons.io devait être ajouté en tant que dépendance. Ma faute. :)
Shahraiz T.
7
Veuillez fermer correctement OutputStream, utilisez un essai avec des ressources ou IOUtils.closeQuietly. Je sais que ce n'est qu'un exemple, mais les débutants le copieront littéralement.
Il existe également dans org.apache.axis2.util avec un troisième paramètre pour la fonction de copie. La fonctionnalité fonctionne là aussi. Des comparaisons sur quoi utiliser?
Ridhuvarshan
27
Depuis Java 7, vous pouvez le faire en une seule ligne même sans utiliser de bibliothèques externes:
Si vous utilisez Java version 7 ou supérieure, vous pouvez utiliser try-with-resources pour fermer correctement le fichier FileOutputStream. Le code suivant utilise IOUtils.copy()de commons-io .
Réponses:
Vous devez créer un nouveau fichier et copier le contenu de
InputStream
ce fichier:J'utilise pratique
IOUtils.copy()
pour éviter la copie manuelle des flux. En outre, il a une mémoire tampon intégrée.la source
En une seule ligne:
(org.apache.commons.io)
la source
Créez d'abord un fichier temporaire.
la source
Depuis Java 7, vous pouvez le faire en une seule ligne même sans utiliser de bibliothèques externes:
Consultez la documentation de l' API .
la source
Si vous ne souhaitez pas utiliser autre bibliothèque, voici une fonction simple pour convertir
InputStream
àOutputStream
.Vous pouvez maintenant facilement écrire un
Inputstream
fichier dans un fichier en utilisantFileOutputStream
-la source
Solution Java 11 facile avec bloc d' essai avec ressources
java.io.InputStream # transferTo est disponible depuis Java 9.
la source
Si vous utilisez Java version 7 ou supérieure, vous pouvez utiliser try-with-resources pour fermer correctement le fichier
FileOutputStream
. Le code suivant utiliseIOUtils.copy()
de commons-io .la source
try
partie d'initialisation sont automatiquement fermées lorsque letry
bloc est quitté.