Mon code Java reçoit des données de flux comme Twitter. J'ai besoin de stocker les données par ex. 10000 enregistrements pour chaque fichier. Donc, j'ai besoin de recréer le file writer
et buffered writer
pour créer un nouveau fichier, puis écrire des données sur celui-ci.java.io.IOException: flux fermé. Quel est le meilleur moyen d'écrire des données de flux dans plusieurs fichiers?
// global variables
String stat;
long counter = 0;
boolean first = true;
Date date;
SimpleDateFormat format;
String currentTime;
String fileName;
BufferedWriter bw = null;
FileWriter fw = null;
public static void main(String[] args) {
String dirToSave = args[0];
String fileIdentifier = args[1];
createFile(dirToSave, fileIdentifier);
StatusListener listener = new StatusListener() {
@Override
public void onStatus(Status status) {
stat = TwitterObjectFactory.getRawJSON(status);
try {
if(bw!=null){
bw.write(stat + "\n");
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
counter++;
if (counter == 10000) {
createFile(dirToSave, fileIdentifier);
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException ex) {
System.out.println(ex.getMessage());
}
counter = 0;
}
}
};
TwitterStream twitterStream = new TwitterStreamFactory(confBuild.build()).getInstance();
twitterStream.addListener(listener);
// twitterStream.filter(filQuery);
}
public static void createFile(String path, String fileIdentifier) {
date = new Date();
format = new SimpleDateFormat("yyyyMMddHHmm");
currentTime = format.format(date);
fileName = path + "/" + fileIdentifier + currentTime + ".json";
// if there was buffer before, flush & close it first before creating new file
if (!first) {
try {
bw.flush();
bw.close();
fw.close();
} catch (IOException ex) {
Logger.getLogger(LocalFile_All_en.class
.getName()).log(Level.SEVERE, null, ex);
}
} else {
first = false;
}
// create a new file
try {
fw = new FileWriter(fileName);
bw = new BufferedWriter(fw);
} catch (IOException ex) {
Logger.getLogger(Stack.class
.getName()).log(Level.SEVERE, null, ex);
}
}
Cependant, je reçois toujours des erreurs après quelques heures.
SEVERE: null
java.io.IOException: Stream closed
EDIT: Le message d'erreur indique que, ces codes jettent l'erreur
if (counter == 10000) {
createFile(dirToSave, fileIdentifier);
...
et
bw.flush();
Quel est le problème de mon code? ou existe-t-il un meilleur moyen d'écrire des données de flux comme celle-ci?
Est-ce un programme multithread? – Alex
@Alex non, ce n'est qu'un seul thread. Recevoir des données de flux et stocker dans des fichiers. –
Comment la méthode 'onStatus' est-elle appelée? et quelle ligne jette l'exception? – Alex