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.