Efficient way to write InputStream to a File in Java 6
inputstream, java
Solution
Since you are stuck with Java 6, do yourself a favour and use Guava and its `Closer`:
final Closer closer = Closer.create();
final InputStream in;
final OutputStream out;
final byte[] buf = new byte[32768]; // 32k
int bytesRead;
try {
in = closer.register(createInputStreamHere());
out = closer.register(new FileOutputStream(...));
while ((bytesRead = in.read(buf)) != -1)
out.write(buf, 0, bytesRead);
out.flush();
} finally {
closer.close();
}
Had you used Java 7, the solution would have been as simple as:
final Path destination = Paths.get("pathToYourFile");
try (
final InputStream in = createInputStreamHere();
) {
Files.copy(in, destination);
}
And `yourInputStream` would have been automatically closed for you as a "bonus"; `Files` would have handled `destination` all by itself.
Problem
I will get input stream from third party library to my application. I have to write this input stream to a file. Following is the code snippet I tried: ``` private void writeDataToFile(Stub stub) { OutputStream os = null; InputStream inputStream = null; try { inputStream = stub.getStream(); os = new FileOutputStream("test.txt"); int read = 0; byte[] bytes = new byte[1024]; while ((read = inputStream.read(bytes)) != -1) { os.write(bytes, 0, read); } } catch (Exception e) { log("Error while fetching data", e); } finally { if(inputStream != null) { try { inputStream.close(); } catch (IOException e) { log("Error while closing input stream", e); } } if(os != null) { try { os.close(); } catch (IOException e) { log("Error while closing output stream", e); } } } } ``` Is there any better approach to do this ?