From 36fdc062cafa69b1ebf2e48e27b6103919464d3b Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Fri, 2 May 2014 23:31:37 +0200 Subject: Properly close files and stream on exit --- src/main/TweetShell.java | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/main/TweetShell.java') diff --git a/src/main/TweetShell.java b/src/main/TweetShell.java index be4124b..818c693 100644 --- a/src/main/TweetShell.java +++ b/src/main/TweetShell.java @@ -4,6 +4,7 @@ import io.CompressableDataWriter; import io.DataWriter; import io.OAuthRequester; import io.StreamImpl; +import java.io.Closeable; import java.io.IOException; import java.util.Arrays; import java.util.Map; @@ -15,6 +16,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import mining.Stream; import mining.TwitterApi; +import org.apache.commons.io.IOUtils; import org.json.JSONException; import org.json.JSONObject; import provider.CompositeResultListener; @@ -278,7 +280,7 @@ public class TweetShell implements TwitterApi.PinSupplier { System.out.println("Unique users: " + tc.getUsers().size()); break; case close: - getStream().close(); + safeClose(); break; case help: for (String line : HELP) { @@ -298,6 +300,7 @@ public class TweetShell implements TwitterApi.PinSupplier { } break; case exit: + safeClose(); throw new NoSuchElementException(); case target: if (params.length > 0) { @@ -326,6 +329,18 @@ public class TweetShell implements TwitterApi.PinSupplier { } } + private void safeClose() { + if (stream_cached != null) { + try { + getStream().close(); + } catch (IOException ex) { + // should not happen because getStream exists + System.err.println("getStream().close() -- " + ex.getMessage()); + } + } + resultListeners.close(); + } + /** * @return All targets that can be disabled or enabled. */ @@ -430,8 +445,8 @@ public class TweetShell implements TwitterApi.PinSupplier { resultListeners.unregister(oldListener); // do we need to cleanup something? - if (oldListener instanceof DataWriter) { - ((DataWriter) oldListener).close(); + if (oldListener instanceof Closeable) { + IOUtils.closeQuietly((Closeable) oldListener); } return true; } -- cgit v1.2.1