Java - Skriv en InputStream til en fil

1. Oversigt

I denne hurtige vejledning illustrerer vi, hvordan du gør det skriv en InputStream til en fil - først ved hjælp af almindelig Java, derefter Guava og endelig Apache Commons IO-biblioteket.

Denne artikel er en del af "Java - Tilbage til Basic”Tutorial her på Baeldung.

2. Konverter ved hjælp af almindelig Java

Lad os starte med Java-løsningen:

@Test offentlig ugyldig nårConvertingToFile_thenCorrect () kaster IOException {InputStream initialStream = ny FileInputStream (ny fil ("src / main / resources / sample.txt")); byte [] buffer = ny byte [initialStream.available ()]; initialStream.read (buffer); Fil targetFile = ny fil ("src / main / resources / targetFile.tmp"); OutputStream outStream = ny FileOutputStream (targetFile); outStream.write (buffer); }

Bemærk, at i dette eksempel har inputstrømmen kendte og forudbestemte data - såsom en fil på disken eller en strøm i hukommelsen. På grund af dette, vi behøver ikke at foretage nogen grænsekontrol og vi kan - hvis hukommelsen tillader det - blot læse det og skrive det på én gang.

Hvis inputstrømmen er knyttet til en løbende strøm af data - for eksempel et HTTP-svar fra en igangværende forbindelse - så er det ikke en mulighed at læse hele strømmen en gang. I så fald skal vi sørge for, at vi gør det fortsæt med at læse, indtil vi når slutningen af ​​strømmen:

@Test offentlig ugyldig, nårConvertingInProgressToFile_thenCorrect () kaster IOException {InputStream initialStream = ny FileInputStream (ny fil ("src / main / resources / sample.txt")); Fil targetFile = ny fil ("src / main / resources / targetFile.tmp"); OutputStream outStream = ny FileOutputStream (targetFile); byte [] buffer = ny byte [8 * 1024]; int bytesLæs; mens ((bytesRead = initialStream.read (buffer))! = -1) {outStream.write (buffer, 0, bytesRead); } IOUtils.closeQuietly (initialStream); IOUtils.closeQuietly (outStream); }

Endelig er her endnu en enkel måde, vi kan bruge Java 8 til at udføre den samme operation:

@Test offentligt ugyldigt nårConvertingAnInProgressInputStreamToFile_thenCorrect2 () kaster IOException {InputStream initialStream = ny FileInputStream (ny fil ("src / main / resources / sample.txt")); Fil targetFile = ny fil ("src / main / resources / targetFile.tmp"); java.nio.file.Files.copy (initialStream, targetFile.toPath (), StandardCopyOption.REPLACE_EXISTING); IOUtils.closeQuietly (initialStream); }

3. Konverter ved hjælp af Guava

Dernæst - lad os se på en enklere Guava-baseret løsning:

@Test offentligt ugyldigt nårConvertingInputStreamToFile_thenCorrect3 () kaster IOException {InputStream initialStream = ny FileInputStream (ny fil ("src / main / resources / sample.txt")); byte [] buffer = ny byte [initialStream.available ()]; initialStream.read (buffer); Fil targetFile = ny fil ("src / main / resources / targetFile.tmp"); Files.write (buffer, targetFile); }

4. Konverter ved hjælp af Commons IO

Og endelig - en endnu hurtigere løsning med Apache Commons IO:

@Test offentligt ugyldigt nårConvertingInputStreamToFile_thenCorrect4 () kaster IOException {InputStream initialStream = FileUtils.openInputStream (ny fil ("src / main / resources / sample.txt")); Fil targetFile = ny fil ("src / main / resources / targetFile.tmp"); FileUtils.copyInputStreamToFile (initialStream, targetFile); }

Og der har du det - 3 hurtige måder at skrive InputStream til en fil.

Implementeringen af ​​alle disse eksempler kan findes i vores GitHub-projekt.