0
我正在編譯一大堆信息檢索類的推文。我試圖通過twitter4j使用REST API和Streaming API。當使用流API,我用下面的修改this example:你在TwitterStream中關閉了一個作家?
final LimitedFileWriter output = new LimitedFileWriter("Tweets","tweets");
TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
StatusListener listener = new StatusListener() {
@Override
public void onStatus(Status status) {
try{
output.write("@" + status.getUser().getScreenName() + " -- " + status.getText()+"\n");
}
catch(IOException e){
e.printStackTrace();
}
}
}
twitterStream.addListener(listener);
twitterStream.sample("en");
//output.close();
看來我不能永遠閉上我的作家。我正在使用的作者只是包裝BufferedWriter,同時跟蹤文件大小。如果文件超過特定大小(128MB),寫入程序將關閉當前文件並創建一個新文件。下面是相關類功能:
public void write(String s) throws IOException
{
if(bytesWritten + s.getBytes(charset).length >= MAXSIZE){
output.close();
bytesWritten = 0;
fileNum++;
String fileName = directory + "/" + baseName+fmt.format(fileNum);
currentFile = new File(fileName);
output = new BufferedWriter
(new OutputStreamWriter(new FileOutputStream(fileName),charset));
}
output.write(s);
bytesWritten += s.getBytes(charset).length;
}
public void close() throws IOException{
output.close();
}
如果我嘗試twitterStream.sample()
(註釋掉)後關閉作家,程序崩潰,因爲我試圖寫一個封閉的文件。如果我的理解是正確的,這是因爲TwitterStream類創建了一個與main
線程同時運行的新線程。然後,main
線程關閉流並且twitterStream
不能再寫入它。
如果是這樣的話,我應該在哪裏關閉我的作家?