165 votes

Est-il possible de créer un objet Fichier à partir d'InputStream

Existe-t-il un moyen de créer un objet java.io.File partir d'un objet java.io.InputStream ?

J'ai besoin de lire le fichier d'un RAR . Je n'essaie pas d'écrire un fichier temporaire, j'ai un fichier dans l'archive RAR que j'essaie de lire.

120voto

Tomasz Nurkiewicz Points 140462

Vous devez créer un nouveau fichier et copier le contenu de InputStream vers ce fichier :

File file = //...
try(OutputStream outputStream = new FileOutputStream(file)){
    IOUtils.copy(inputStream, outputStream);
} catch (FileNotFoundException e) {
    // handle exception here
} catch (IOException e) {
    // handle exception here
}

J'utilise IOUtils.copy() pour éviter la copie manuelle des flux. Il dispose également d'un tampon intégré.

84voto

Victor Petit Points 701

En une ligne :

FileUtils.copyInputStreamToFile(inputStream, file);

(org.apache.commons.io)

50voto

kidney Points 1486

Depuis Java 7, vous pouvez le faire en une seule ligne même sans utiliser de bibliothèques externes :

Files.copy(inputStream, outputPath, StandardCopyOption.REPLACE_EXISTING);

Voir les documents de l'API.

37voto

Shehan Simen Points 31

Créez d'abord un fichier temporaire.

File tempFile = File.createTempFile(prefix, suffix);
tempFile.deleteOnExit();
FileOutputStream out = new FileOutputStream(tempFile);
IOUtils.copy(in, out);
return tempFile;

9voto

Nabin Bhandari Points 8545

Si vous ne souhaitez pas utiliser d'autres bibliothèques, voici une fonction simple pour copier des données d'un InputStream à un OutputStream.

public static void copyStream(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1) {
        out.write(buffer, 0, read);
    }
}

Maintenant, vous pouvez facilement écrire un Inputstream dans un fichier en utilisant FileOutputStream-

FileOutputStream out = new FileOutputStream(outFile);
copyStream (inputStream, out);
out.close();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X