[java]Lecture d'un gros fichier texte

Lecture d'un gros fichier texte [java] - Java - Programmation

Marsh Posté le 02-06-2009 à 19:13:59    

Bonjour,
 
Je suis en train de tenter de stocker dans un tableau un dictionnaire qui provient d'un fichier texte. Seulement, après 30 min de compilation toujours rien... Je vais devoir en plus appliquer d'autres traitements à ce dictionnaire, donc il faut vraiment que je trouve une solution pour obtenir une lecture rapide. Le fichier texte ne fait que 24 Mo.
J'utilise pour le moment BufferedReader, mais pas moyen d'en ressortir quoi que ce soit.
D'autre part, je me demande si le problème ne vient pas d'Eclipse...Ou de la mémoire dédiée à la JVM.
Si quelqu'un a une idée, je suis preneuse.
 
Merci d'avance!

Reply

Marsh Posté le 02-06-2009 à 19:13:59   

Reply

Marsh Posté le 02-06-2009 à 20:20:48    

ça serait pas mal si tu pouvais nos montrer ton code (ou au moins un extrait d'une partie représentative).
Si c'est effectivement la compilation (et pas l'exécution du programme) qui dure + de 30 min, le problème ne devrait pas venir de la taille de ton fichier (dictionnaire) mais soit de ton code, soit de ton ide, soit de l'ordi que tu utilise pour compiler ton programme.
 
Mais bon, ton code serait le bienvenu pour mieux diagnostiquer ton pb.


---------------
By bob.
Reply

Marsh Posté le 02-06-2009 à 21:30:36    

Alors voila mon code:
 
La fonction de lecture:
 

Code :
  1. public static String lecturefich() throws IOException {
  2.  RandomAccessFile fich = new RandomAccessFile("dico.txt", "r" );
  3.  Console.open("dico.txt", "r" );
  4.  StringBuffer dico = new StringBuffer();
  5.  dico.append(fich.readLine());
  6.  int i =0;
  7.  while (fich.readLine() != null) {
  8.   dico.append(fich.readLine());
  9.  }
  10.  return fich.toString();
  11. }


 
Et Eclipse me sort un out of memory...

Message cité 1 fois
Message édité par T0ots le 02-06-2009 à 23:28:25
Reply

Marsh Posté le 03-06-2009 à 08:15:09    

T0ots a écrit :


Code :
  1. while (fich.readLine() != null) {
  2.   dico.append(fich.readLine());
  3.  }



 

Ca règle peut-être pas le problème mais tu n'enregistres qu'une ligne sur 2 car ton readLine de ta condition récupère la ligne dans le vide.
Et en plus ça pourrait planter car fich.readLine pourrait être nul dans le while.


Message édité par Deamon le 03-06-2009 à 08:15:51
Reply

Marsh Posté le 03-06-2009 à 08:46:12    

Il y a un truc que je comprend pas.. Pourquoi tu fais tout ce traitement si de toutes façons tu retournes fich.toString() et que donc "dico" n'est jamais utilisé ?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 03-06-2009 à 09:48:06    

1) Utilise plutôt un BufferedReader avec un FileReader à la place d'un RandomAccessFile.
2) Un peu de lecture sur le flux en Java: http://java.sun.com/docs/books/tutorial/essential/io/charstreams.html
3) Initialise ton StringBuffer avec une grosse taille (new StringBuffer(10*1024)), ça améliora les perfs
4) Tu peut utilise CommonsIO, avec les méthodes de FileUtils pour lire un fichier texte


---------------
Light is right
Reply

Marsh Posté le 03-06-2009 à 15:05:30    

Merci!
Problème résolu!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed