Я склонен согласиться с другими, которые предлагают метод, принимающий Closeable
, но из-за обслуживания очень долгоживущих программ, решение, которое я использую, немного отличается. По сути, для обеспечения гибкости требуется OutputStream
.
public class IOHandler {
private IOHandler();
public static void close(OutputStream out, Closeable c) {
if (c != null) {
try {
c.close();
} catch (IOException e) {
out.print(c.printStackTrace().getBytes());
}
}
}
Основным преимуществом этого является то, что вы можете вызывать его различными способами, устраняя необходимость в специализированных утилитах для обработки исключений при регистрации в stderr, stdout и файлах.
IOHandler.close(System.out, openFile);
IOHandler.close(System.err, openFile);
IOHandler.close(logFile, openFile);
Кроме этой добавленной функции, это в основном то же решение, которое предлагали другие.