Problème Scanner sur Gros fichier
Bonjour à tous,
Voici mon petit problème actuel :
- j'ai un gros fichier MSF (fichier des messages de thunderbird) de 300 Mo
- j'essaye de le séparer en plusieurs petits fichiers selon un délimiteur
- j'utilise donc la classe Scanner en utilisant un délimiteur : c'est franchement exactement ce qu'il me faut, et ça marche bien jusqu'à un bon vieux Java Heap Space ! Du coup, je ne sais pas exactement comment marche cette classe : le scanner ne se vide-t-il pas après chaque occurrence trouvée ?
Voici le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
try {
Scanner scanner = null;
try {
scanner = new Scanner(new BufferedReader(
new FileReader(file)));
scanner.useDelimiter(Pattern.compile("From "));
int j = 0;
String sMessage = null;
while (scanner.hasNext()) {
sMessage = scanner.next();
if (sMessage.length() > 0) {
System.out.println("MESSAGE NUMERO " + j);
System.out.println(sMessage.substring(0, 50));
System.out .println("#################################");
// }
j++;
}
} finally {
if (scanner != null)
scanner.close();
}
} catch (IOException e) {
e.printStackTrace();
} |
Pour tester, on peut tester sur n'importe quelle boite aux lettres Thunderbird : pas le fichier MSF, mais le pendant sans extension.
Ce que j'ai essayé jusqu'à présent :
- BufferedReader + FileReader : lecture ligne à ligne beaucoup trop lente sur un fichier de 300 Mo
- JMork : les fichiers MSF étant des fichiers mork, j'ai essayé cette api mais ça ne donne rien
- Scanner avec findWithinHorizon + un Horizon à 0 : ça revient au même qu'un bufferedreader --> très lent
Voilà, j'espère que vous pourrez me dépanner, car je n'ai encore trouver aucune solution satisfaisante !
Merci !