Closeables
Date: 2016-05-24

com.google.common.io

## Class Closeables

- java.lang.Object
- - com.google.common.io.Closeables

-     @Beta
      public final class Closeables
      extends java.lang.Object

  Utility methods for working with `Closeable` objects.
  Since:
    1.0

- - ### Method Summary

    Methods
    Modifier and Type | Method and 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