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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !