Je dois traiter un gros fichier texte (600 Mo environ) afin de le formater correctement, en écrivant la sortie formatée dans un nouveau fichier texte. Le problème est que l'écriture du contenu dans le nouveau fichier s'arrête à environ 6,2 Mo. Voici le code:Java - Impossible de terminer l'écriture du fichier texte
/* Analysis of the text in fileName to see if the lines are in the correct format
* (Theme\tDate\tTitle\tDescription). If there are lines that are in the incorrect format,
* the method corrects them.
*/
public static void cleanTextFile(String fileName, String destFile) throws IOException {
OutputStreamWriter writer = null;
BufferedReader reader = null;
try {
writer = new OutputStreamWriter(new FileOutputStream(destFile), "UTF8");
} catch (IOException e) {
System.out.println("Could not open or create the file " + destFile);
}
try {
reader = new BufferedReader(new FileReader(fileName));
} catch (FileNotFoundException e) {
System.out.println("The file " + fileName + " doesn't exist in the folder.");
}
String line;
String[] splitLine;
StringBuilder stringBuilder = new StringBuilder("");
while ((line = reader.readLine()) != null) {
splitLine = line.split("\t");
stringBuilder.append(line);
/* If the String array resulting of the split operation doesn't have size 4,
* then it means that there are elements of the news item missing in the line
*/
while (splitLine.length != 4) {
line = reader.readLine();
stringBuilder.append(line);
splitLine = stringBuilder.toString().split("\t");
}
stringBuilder.append("\n");
writer.write(stringBuilder.toString());
stringBuilder = new StringBuilder("");
writer.flush();
}
writer.close();
reader.close();
}
Je l'ai déjà cherché des réponses, mais le problème est généralement lié au fait que l'auteur n'a pas été fermée ou l'absence de la méthode flush()
. Par conséquent, je pense que le problème est dans le BufferedReader. Qu'est-ce que je rate?
Avez-vous essayé correctement avec chasse d'eau ..? – OmniOwl
J'ai d'abord essayé d'utiliser le rinçage après un certain nombre de fois (500 pour être exact), en espérant éviter le rinçage à chaque itération du cycle, mais cela n'a pas fonctionné. Quelle est la bonne façon d'utiliser Flush? – Judas
Pourriez-vous fournir au moins quelques enregistrements à partir du fichier d'entrée (celui qui a 600 Mo)? – Jagger