Java - Ecrit un InputStream dans un fichier

Java - Écrire un InputStream dans un fichier

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons illustrer commentwrite an InputStream to a File - en utilisant d'abord Java, puis Guava et enfin la bibliothèque Apache Commons IO.

Cet article fait partie dethe “Java – Back to Basic” tutorial ici par exemple.

Lectures complémentaires:

Java - InputStream to Reader

Comment convertir un InputStream en un lecteur à l'aide de Java, de Guava et de la bibliothèque Apache Commons IO.

Read more

Java - Convertir un fichier en InputStream

Comment ouvrir un InputStream à partir d'un fichier Java - à l'aide de Java pur, de Guava et de la bibliothèque Apache Commons IO.

Read more

Java InputStream to Byte Array et ByteBuffer

Comment convertir un InputStream en un octet [] en Java, Guava ou Commons IO.

Read more

2. Convertir à l'aide de Java brut

Commençons parthe Java solution:

@Test
public void whenConvertingToFile_thenCorrect()
  throws IOException {

    InputStream initialStream = new FileInputStream(
      new File("src/main/resources/sample.txt"));
    byte[] buffer = new byte[initialStream.available()];
    initialStream.read(buffer);

    File targetFile = new File("src/main/resources/targetFile.tmp");
    OutputStream outStream = new FileOutputStream(targetFile);
    outStream.write(buffer);
}

Notez que dans cet exemple, le flux d'entrée contient des données connues et prédéterminées, telles qu'un fichier sur disque ou un flux en mémoire. Pour cette raison,we don’t need to do any bounds checking et nous pouvons - si la mémoire le permet - simplement le lire et l'écrire en une seule fois.

Java - Write an Input Stream to a File

 

Si le flux d'entrée est lié à unongoing stream of data - par exemple, une réponse HTTP provenant d'une connexion en cours - alors la lecture du flux entier une fois n'est pas une option. Dans ce cas, nous devons nous assurer que nouskeep reading until we reach the end of the stream:

@Test
public void whenConvertingInProgressToFile_thenCorrect()
  throws IOException {

    InputStream initialStream = new FileInputStream(
      new File("src/main/resources/sample.txt"));
    File targetFile = new File("src/main/resources/targetFile.tmp");
    OutputStream outStream = new FileOutputStream(targetFile);

    byte[] buffer = new byte[8 * 1024];
    int bytesRead;
    while ((bytesRead = initialStream.read(buffer)) != -1) {
        outStream.write(buffer, 0, bytesRead);
    }
    IOUtils.closeQuietly(initialStream);
    IOUtils.closeQuietly(outStream);
}

Enfin, voici un autre moyen simple d’utiliser Java 8 pour effectuer la même opération:

@Test
public void whenConvertingAnInProgressInputStreamToFile_thenCorrect2()
  throws IOException {

    InputStream initialStream = new FileInputStream(
      new File("src/main/resources/sample.txt"));
    File targetFile = new File("src/main/resources/targetFile.tmp");

    java.nio.file.Files.copy(
      initialStream,
      targetFile.toPath(),
      StandardCopyOption.REPLACE_EXISTING);

    IOUtils.closeQuietly(initialStream);
}

3. Convertir à l'aide de la goyave

Ensuite, jetons un coup d'œil à une solution plus simple basée sur Guava:

@Test
public void whenConvertingInputStreamToFile_thenCorrect3()
  throws IOException {

    InputStream initialStream = new FileInputStream(
      new File("src/main/resources/sample.txt"));
    byte[] buffer = new byte[initialStream.available()];
    initialStream.read(buffer);

    File targetFile = new File("src/main/resources/targetFile.tmp");
    Files.write(buffer, targetFile);
}

4. Convertir à l'aide de Commons IO

Et enfin - une solution encore plus rapide avec Apache Commons IO:

@Test
public void whenConvertingInputStreamToFile_thenCorrect4()
  throws IOException {
    InputStream initialStream = FileUtils.openInputStream
      (new File("src/main/resources/sample.txt"));

    File targetFile = new File("src/main/resources/targetFile.tmp");

    FileUtils.copyInputStreamToFile(initialStream, targetFile);
}

Et là vous l'avez - 3 façons rapides d'écrire lesInputStream dans un fichier.