Java - InputStream írása egy fájlba

1. Áttekintés

Ebben a gyors bemutatóban bemutatjuk, hogyan kell írj egy InputStream fájlba - először a sima Java, majd a Guava és végül az Apache Commons IO könyvtár használatával.

Ez a cikk a „Java - Vissza az alapokhoz”Bemutató itt a Baeldung-on.

2. Konvertálás Sima Java használatával

Kezdjük azzal a Java megoldás:

@Test public void whenConvertingToFile_thenCorrect () IOException-t dob ​​{InputStream initialStream = new FileInputStream (új File ("src / main / resources / sample.txt")); bájt [] puffer = új bájt [kezdeti adatfolyam.available ()]; initialStream.read (puffer); Fájl targetFile = új fájl ("src / main / resources / targetFile.tmp"); OutputStream outStream = új FileOutputStream (targetFile); outStream.write (puffer); }

Vegye figyelembe, hogy ebben a példában a bemeneti adatfolyamnak ismert és előre meghatározott adatai vannak - például egy fájl a lemezen vagy egy memóriában lévő adatfolyam. Emiatt, nem kell semmilyen határellenőrzést végrehajtanunk és - ha a memória engedi - egyszerűen elolvashatjuk és egy mozdulattal megírhatjuk.

Ha a bemeneti adatfolyam egy folyamatos adatfolyama - például egy folyamatban lévő kapcsolatból érkező HTTP-válasz -, akkor a teljes adatfolyam egyszeri olvasása nem lehetséges. Ebben az esetben meg kell győződnünk arról, hogy mi olvass tovább, amíg el nem érjük a patak végét:

@Test public void whenConvertingInProgressToFile_thenCorrect () dobja az IOException {InputStream initialStream = new FileInputStream (új File ("src / main / resources / sample.txt")); Fájl targetFile = új fájl ("src / main / resources / targetFile.tmp"); OutputStream outStream = új FileOutputStream (targetFile); bájt [] puffer = új bájt [8 * 1024]; int bytesRead; míg ((bytesRead = kezdetiStream.read (puffer))! = -1) {outStream.write (puffer, 0, bytesRead); } IOUtils.closeQuietly (kezdeti adatfolyam); IOUtils.closeQuietly (outStream); }

Végül, itt van még egy egyszerű módszer arra, hogy a Java 8-at használhatjuk ugyanarra a műveletre:

@Test public void whenConvertingAnInProgressInputStreamToFile_thenCorrect2 () IOException dobja {InputStream initialStream = új FileInputStream (új File ("src / main / resources / sample.txt")); Fájl targetFile = új fájl ("src / main / resources / targetFile.tmp"); java.nio.file.Files.copy (initialStream, targetFile.toPath (), StandardCopyOption.REPLACE_EXISTING); IOUtils.closeQuietly (kezdeti adatfolyam); }

3. Konvertálás Guava használatával

Következő - vessünk egy pillantást egy egyszerűbb guava alapú megoldásra:

@Test public void whenConvertingInputStreamToFile_thenCorrect3 () dobja az IOException {InputStream initialStream = new FileInputStream (új File ("src / main / resources / sample.txt")); bájt [] puffer = új bájt [kezdeti adatfolyam.available ()]; initialStream.read (puffer); Fájl targetFile = új fájl ("src / main / resources / targetFile.tmp"); Files.write (puffer, targetFile); }

4. Konvertálás a Commons IO használatával

És végül - még gyorsabb megoldás az Apache Commons IO-val:

@Test public void whenConvertingInputStreamToFile_thenCorrect4 () IOException dobja {InputStream initialStream = FileUtils.openInputStream (új fájl ("src / main / resources / sample.txt")); Fájl targetFile = új fájl ("src / main / resources / targetFile.tmp"); FileUtils.copyInputStreamToFile (kezdetiStream, targetFile); }

És itt van - 3 gyors módszer a InputStream fájlba.

Mindezen példák megvalósítása megtalálható a GitHub projektünkben.


$config[zx-auto] not found$config[zx-overlay] not found