1bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2007 The Guava Authors 3bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 4bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Licensed under the Apache License, Version 2.0 (the "License"); 5bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * you may not use this file except in compliance with the License. 6bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * You may obtain a copy of the License at 7bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 8bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * http://www.apache.org/licenses/LICENSE-2.0 9bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 10bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Unless required by applicable law or agreed to in writing, software 11bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * distributed under the License is distributed on an "AS IS" BASIS, 12bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * See the License for the specific language governing permissions and 14bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * limitations under the License. 15bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 16bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 17bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorpackage com.google.common.io; 18bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.Beta; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 21bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorimport java.io.Flushable; 22bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorimport java.io.IOException; 23bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorimport java.util.logging.Level; 24bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorimport java.util.logging.Logger; 25bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 26bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor/** 27bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Utility methods for working with {@link Flushable} objects. 28bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 29bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @author Michael Lancaster 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 1.0 31bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@Beta 33bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnorpublic final class Flushables { 34bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor private static final Logger logger 35bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor = Logger.getLogger(Flushables.class.getName()); 36bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 37bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor private Flushables() {} 38bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 39bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor /** 40bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Flush a {@link Flushable}, with control over whether an 41bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * {@code IOException} may be thrown. 42bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 43bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * <p>If {@code swallowIOException} is true, then we don't rethrow 44bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * {@code IOException}, but merely log it. 45bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 46bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @param flushable the {@code Flushable} object to be flushed. 47bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @param swallowIOException if true, don't propagate IO exceptions 48bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * thrown by the {@code flush} method 49bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @throws IOException if {@code swallowIOException} is false and 50bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * {@link Flushable#flush} throws an {@code IOException}. 51bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @see Closeables#close 52bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 53bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor public static void flush(Flushable flushable, boolean swallowIOException) 54bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor throws IOException { 55bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor try { 56bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor flushable.flush(); 57bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } catch (IOException e) { 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (swallowIOException) { 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert logger.log(Level.WARNING, 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "IOException thrown while flushing Flushable.", e); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else { 62bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor throw e; 63bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 64bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 65bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 66bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor 67bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor /** 68bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * Equivalent to calling {@code flush(flushable, true)}, but with no 69bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * {@code IOException} in the signature. 70bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * 71bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor * @param flushable the {@code Flushable} object to be flushed. 72bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor */ 73bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor public static void flushQuietly(Flushable flushable) { 74bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor try { 75bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor flush(flushable, true); 76bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } catch (IOException e) { 77bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor logger.log(Level.SEVERE, "IOException should not have been thrown.", e); 78bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 79bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor } 80bfe2dd089341dcb4c1fb65a5b6b077ad0ebbf6dcDan Egnor} 81