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.
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.
Java InputStream to Byte Array et ByteBuffer
Comment convertir un InputStream en un octet [] en Java, Guava ou Commons IO.
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.
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.