Is this code
BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt")); try { bw.write("test"); } finally { IOUtils.closeQuietly(bw); }
safe or not? As far as I understand when we close a BufferedWriter it will flush its buffer to the underlying stream and may fail due to an error. But IOUtils.closeQuietly API says that any exceptions will be ignored.
Is it possible a data loss will go unnoticed due to IOUtils.closeQuietly?
Yes, it's safe to use it but only for Java6 and lower. From Java7, you should user try-with-resource. It will eliminate much of the boilerplate code you have and the need to use IOUtils.
IOUtils provide utility methods for reading, writing and copying files. The methods work with InputStream, OutputStream, Reader and Writer.
Copies chars from a Reader to bytes on an OutputStream using the specified character encoding, and calling flush.
Applications can re-use buffers by using the underlying methods directly. This may improve performance for applications that need to do a lot of copying. Wherever possible, the methods in this class do not flush or close the stream.
The code should look like this regarding to the javadoc of closeQuietly()
:
BufferedWriter bw = null; try { bw = new BufferedWriter(new FileWriter("test.txt")); bw.write("test"); bw.flush(); // you can omit this if you don't care about errors while flushing bw.close(); // you can omit this if you don't care about errors while closing } catch (IOException e) { // error handling (e.g. on flushing) } finally { IOUtils.closeQuietly(bw); }
closeQuietly()
is not intended for general use instead of calling close()
directly on a Closable. Its intended use-case is for ensuring the close inside a finally-block - all error handling you need have to be done BEFORE that.
That means, if you want to react on Exceptions during the call of close()
or flush()
then you've to handle it the normal way. Adding closeQuietly()
in your finally-block just ensures the close, e.g. when the flush failed and close was not called in try-block.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With