Java - Napišite InputStream u datoteku

1. Pregled

U ovom brzom vodiču ilustrirat ćemo kako napiši InputStream u datoteku - prvo koristeći običnu Javu, zatim Guavu i na kraju Apache Commons IO knjižnicu.

Ovaj je članak dio „Java - Povratak na Basic”Tutorial ovdje na Baeldungu.

2. Pretvori pomoću obične Jave

Krenimo od Java rješenje:

@Test public void whenConvertingToFile_thenCorrect () baca IOException {InputStream InitialStream = new FileInputStream (nova datoteka ("src / main / resources / sample.txt")); bajt [] međuspremnik = novi bajt [InitialStream.available ()]; InitialStream.read (međuspremnik); Datoteka targetFile = nova datoteka ("src / main / resources / targetFile.tmp"); OutputStream outStream = novi FileOutputStream (targetFile); outStream.write (međuspremnik); }

Imajte na umu da u ovom primjeru ulazni tok ima poznate i unaprijed određene podatke - kao što je datoteka na disku ili tok u memoriji. Zbog ovoga, ne trebamo provjeravati granice i možemo ga - ako memorija dopušta - jednostavno pročitati i zapisati u jednom potezu.

Ako je ulazni tok povezan s tekući tok data - na primjer, HTTP odgovor koji dolazi iz stalne veze - tada čitanje cijelog toka jednom nije opcija. U tom slučaju moramo biti sigurni da jesmo nastavite čitati dok ne dođemo do kraja potoka:

@Test public void whenConvertingInProgressToFile_thenCorrect () baca IOException {InputStream InitialStream = new FileInputStream (nova datoteka ("src / main / resources / sample.txt")); Datoteka targetFile = nova datoteka ("src / main / resources / targetFile.tmp"); OutputStream outStream = novi FileOutputStream (targetFile); bajt [] međuspremnik = novi bajt [8 * 1024]; int bytesRead; while ((bytesRead = InitialStream.read (buffer))! = -1) {outStream.write (buffer, 0, bytesRead); } IOUtils.closeQuietly (InitialStream); IOUtils.closeQuietly (outStream); }

Konačno, evo još jednog, jednostavnog načina na koji možemo koristiti Java 8 za obavljanje iste operacije:

@Test public void whenConvertingAnInProgressInputStreamToFile_thenCorrect2 () baca IOException {InputStream InitialStream = new FileInputStream (nova datoteka ("src / main / resources / sample.txt")); Datoteka targetFile = nova datoteka ("src / main / resources / targetFile.tmp"); java.nio.file.Files.copy (InitialStream, targetFile.toPath (), StandardCopyOption.REPLACE_EXISTING); IOUtils.closeQuietly (InitialStream); }

3. Pretvorite pomoću Guave

Dalje - pogledajmo jednostavnije rješenje temeljeno na Guavi:

@Test public void whenConvertingInputStreamToFile_thenCorrect3 () baca IOException {InputStream InitialStream = new FileInputStream (nova datoteka ("src / main / resources / sample.txt")); bajt [] međuspremnik = novi bajt [InitialStream.available ()]; InitialStream.read (međuspremnik); Datoteka targetFile = nova datoteka ("src / main / resources / targetFile.tmp"); Files.write (buffer, targetFile); }

4. Pretvori koristeći Commons IO

I na kraju - još brže rješenje s Apache Commons IO:

@Test public void whenConvertingInputStreamToFile_thenCorrect4 () baca IOException {InputStream InitialStream = FileUtils.openInputStream (nova datoteka ("src / main / resources / sample.txt")); Datoteka targetFile = nova datoteka ("src / main / resources / targetFile.tmp"); FileUtils.copyInputStreamToFile (InitialStream, targetFile); }

Eto vam - 3 brza načina pisanja InputStream u datoteku.

Implementacija svih ovih primjera može se naći u našem GitHub projektu.