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
Pour tester, on peut tester sur n'importe quelle boite aux lettres Thunderbird : pas le fichier MSF, mais le pendant sans extension.
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(); }
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 !
Partager