summaryrefslogtreecommitdiff
path: root/src/io/DataWriter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/io/DataWriter.java')
-rw-r--r--src/io/DataWriter.java59
1 files changed, 40 insertions, 19 deletions
diff --git a/src/io/DataWriter.java b/src/io/DataWriter.java
index 252c50c..d06e283 100644
--- a/src/io/DataWriter.java
+++ b/src/io/DataWriter.java
@@ -48,24 +48,30 @@ public class DataWriter implements ResultListener {
public final static String CFG_TWEETS_FILENAME = "tweets-filename";
/**
- * Opens a stream to every single file that data will be streamed to.
+ * Creates an instance, specifying the profile and file names to which
+ * tweets and users are written.
*
* @param profilesName The file to write the profiles to.
* @param tweetsName The file to write the tweets to.
- * @throws java.io.IOException if the files cannot be read or written.
*/
- public DataWriter(final String profilesName, final String tweetsName)
- throws IOException {
+ public DataWriter(final String profilesName, final String tweetsName) {
m_profile = getStore(profilesName);
- try {
- m_profileIdSet = readIds(m_profile);
- } catch (IOException ex) {
- m_profile.close();
- throw ex;
- }
+ m_profileIdSet = new HashSet<>();
m_tweet = getStore(tweetsName);
+ m_tweetIdSet = new HashSet<>();
+ }
+
+ /**
+ * Opens a stream to every single file that data will be streamed to.
+ *
+ * @throws java.io.IOException if the files cannot be read or written.
+ */
+ public void open() throws IOException {
try {
- m_tweetIdSet = readIds(m_tweet);
+ m_profile.open();
+ m_tweet.open();
+ readIds(m_profileIdSet, m_profile);
+ readIds(m_tweetIdSet, m_tweet);
} catch (IOException ex) {
m_profile.close();
m_tweet.close();
@@ -78,9 +84,8 @@ public class DataWriter implements ResultListener {
*
* @param filename File to read/write.
* @return A Store instance providing read and write access.
- * @throws IOException if the target file cannot be read or written.
*/
- protected Store getStore(String filename) throws IOException {
+ protected Store getStore(String filename) {
return new SimpleFileStore(filename);
}
@@ -106,8 +111,7 @@ public class DataWriter implements ResultListener {
* @param is An input stream that provides JSON objects.
* @return The set of ids, may be empty if the fill does not exist.
*/
- private Set<Long> readIds(Store store) throws IOException {
- Set<Long> idSet = new HashSet<>();
+ private void readIds(Set<Long> idSet, Store store) throws IOException {
InputStream is = null;
try {
is = store.getInputStream();
@@ -128,7 +132,6 @@ public class DataWriter implements ResultListener {
} finally {
IOUtils.closeQuietly(is);
}
- return idSet;
}
/**
@@ -178,11 +181,22 @@ public class DataWriter implements ResultListener {
}
/**
+ * Opens the writable stream (if not open yet), must be called before
+ * writing a stream.
+ *
+ * @throws IOException
+ */
+ abstract public void open() throws IOException;
+
+ /**
* Properly closes a file, flushing any buffers.
*/
public void close() {
try {
- os.close();
+ if (os != null) {
+ os.close();
+ os = null;
+ }
} catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.WARNING,
"Could not close " + getFileName(), ex);
@@ -193,6 +207,7 @@ public class DataWriter implements ResultListener {
* Returns a previously opened writable file stream.
*
* @return A stream to which JSON objects can be written (one per line).
+ * If no writable stream is open, {@code null} is returned.
*/
public OutputStream getOutputStream() {
return os;
@@ -209,9 +224,15 @@ public class DataWriter implements ResultListener {
class SimpleFileStore extends Store {
- SimpleFileStore(String filename) throws FileNotFoundException {
+ SimpleFileStore(String filename) {
super(filename);
- os = new FileOutputStream(getFileName(), true);
+ }
+
+ @Override
+ public void open() throws IOException {
+ if (os == null) {
+ os = new FileOutputStream(getFileName(), true);
+ }
}
@Override