Java - Skriv en InputStream til en fil

1. Oversikt

I denne raske opplæringen skal vi illustrere hvordan du gjør det skriv en InputStream til en fil - Først bruker du vanlig Java, deretter Guava og til slutt Apache Commons IO-biblioteket.

Denne artikkelen er en del avJava - Tilbake til Basic”Tutorial her på Baeldung.

2. Konverter ved hjelp av vanlig Java

La oss 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); File targetFile = new File ("src / main / resources / targetFile.tmp"); OutputStream outStream = ny FileOutputStream (targetFile); outStream.write (buffer); }

Merk at inngangsstrømmen i dette eksemplet har kjente og forhåndsbestemte data - for eksempel en fil på disken eller en strøm i minnet. På grunn av dette, vi trenger ikke å gjøre noen grensekontroll og vi kan - hvis minnet tillater det - bare lese den og skrive den på en gang.

Hvis inngangsstrømmen er koblet til en løpende strøm av data - for eksempel et HTTP-svar som kommer fra en pågående tilkobling - da er ikke noe å lese hele strømmen en gang. I så fall må vi sørge for at vi gjør det fortsett å lese til vi når slutten av strømmen:

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

Til slutt, her er enda en enkel måte vi kan bruke Java 8 til å utføre den samme operasjonen:

@Test offentlig ugyldig nårConvertingAnInProgressInputStreamToFile_thenCorrect2 () kaster IOException {InputStream initialStream = ny FileInputStream (ny fil ("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. Konverter ved hjelp av Guava

Neste - la oss ta en titt på en enklere Guava-basert løsning:

@Test offentlig ugyldig 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); File targetFile = new File ("src / main / resources / targetFile.tmp"); Files.write (buffer, targetFile); }

4. Konverter ved hjelp av Commons IO

Og til slutt - en enda raskere løsning med Apache Commons IO:

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

Og der har du det - 3 raske måter å skrive InputStream til en fil.

Implementeringen av alle disse eksemplene finner du i GitHub-prosjektet vårt.


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