1. Общ преглед
В този бърз урок ще илюстрираме как да напишем InputStream във файл - първо използвайки обикновена Java, след това Guava и накрая библиотеката Apache Commons IO.
Тази статия е част от урока „ Java - Back to Basic “ тук на Baeldung.
2. Конвертиране с помощта на обикновена Java
Нека започнем с решението на Java :
@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); }
Имайте предвид, че в този пример входният поток има известни и предварително определени данни - например файл на диск или поток в паметта. Поради това не е нужно да правим никакви проверки на граници и можем - ако паметта позволява - просто да го прочетем и напишем с едно движение.

Ако входният поток е свързан с текущ поток от dat a - например HTTP отговор, идващ от текуща връзка - тогава четенето на целия поток веднъж не е опция. В този случай трябва да се уверим, че продължаваме да четем, докато стигнем до края на потока :
@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); }
И накрая, ето още един, прост начин, по който можем да използваме Java 8 за извършване на същата операция:
@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. Преобразувайте с помощта на 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. Конвертиране с помощта на Commons IO
И накрая - още по-бързо решение с 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); }
И ето ви - 3 бързи начина за запис на InputStream във файл.
Изпълнението на всички тези примери може да бъде намерено в нашия проект GitHub.