Class Closeables


  • @Beta
    public final class Closeables
    extends java.lang.Object
    Utility methods for working with Closeable objects.
    Since:
    1.0
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void close​(java.io.Closeable closeable, boolean swallowIOException)
      Closes a Closeable, with control over whether an IOException may be thrown.
      static void closeQuietly​(java.io.InputStream inputStream)
      Closes the given InputStream, logging any IOException that's thrown rather than propagating it.
      static void closeQuietly​(java.io.Reader reader)
      Closes the given Reader, logging any IOException that's thrown rather than propagating it.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • close

        public static void close​(@Nullable
                                 java.io.Closeable closeable,
                                 boolean swallowIOException)
                          throws java.io.IOException
        Closes a Closeable, with control over whether an IOException may be thrown. This is primarily useful in a finally block, where a thrown exception needs to be logged but not propagated (otherwise the original exception will be lost).

        If swallowIOException is true then we never throw IOException but merely log it.

        Example:

            
        
           public void useStreamNicely() throws IOException {
             SomeStream stream = new SomeStream("foo");
             boolean threw = true;
             try {
               // ... code which does something with the stream ...
               threw = false;
             } finally {
               // If an exception occurs, rethrow it only if threw==false:
               Closeables.close(stream, threw);
             }
           }
         
        Parameters:
        closeable - the Closeable object to be closed, or null, in which case this method does nothing
        swallowIOException - if true, don't propagate IO exceptions thrown by the close methods
        Throws:
        java.io.IOException - if swallowIOException is false and close throws an IOException.
      • closeQuietly

        public static void closeQuietly​(@Nullable
                                        java.io.InputStream inputStream)
        Closes the given InputStream, logging any IOException that's thrown rather than propagating it.

        While it's not safe in the general case to ignore exceptions that are thrown when closing an I/O resource, it should generally be safe in the case of a resource that's being used only for reading, such as an InputStream. Unlike with writable resources, there's no chance that a failure that occurs when closing the stream indicates a meaningful problem such as a failure to flush all bytes to the underlying resource.

        Parameters:
        inputStream - the input stream to be closed, or null in which case this method does nothing
        Since:
        17.0
      • closeQuietly

        public static void closeQuietly​(@Nullable
                                        java.io.Reader reader)
        Closes the given Reader, logging any IOException that's thrown rather than propagating it.

        While it's not safe in the general case to ignore exceptions that are thrown when closing an I/O resource, it should generally be safe in the case of a resource that's being used only for reading, such as a Reader. Unlike with writable resources, there's no chance that a failure that occurs when closing the reader indicates a meaningful problem such as a failure to flush all bytes to the underlying resource.

        Parameters:
        reader - the reader to be closed, or null in which case this method does nothing
        Since:
        17.0