lecture d'un fichier volumineux

lecture d'un fichier volumineux - Java - Programmation

Marsh Posté le 09-02-2005 à 22:32:00    

Bonjour,  
 
J'ai un probleme  j'arrive pas a lire un fichier qui est je pense trop volumineux. J'arrive a charger tout mes fichiers texte sauf celui ci.(Le bloc note de windows arrive lui non plus a l'ouvrir et m'indique fichier trop volumineux ,mais s'ouvre tres bien avec word).
 
char data[] = new char[9999999];
  try{
         FileReader reader = new FileReader(file);
         int  charsread  = reader.read(data);
         String j=new String(data, 0 ,charsread);
textArea1.setText(j);
         }  catch(Exception a) {textArea1.setText("erreur" );}

Reply

Marsh Posté le 09-02-2005 à 22:32:00   

Reply

Marsh Posté le 09-02-2005 à 22:42:46    

C'est quoi la taille exacte de ton fichier?

Reply

Marsh Posté le 09-02-2005 à 22:47:23    

je connais pas java mais j'imagine qu'il y a moyen de lire un fichier sans le charger en memoire, ligne par ligne si c'est du texte par exemple, ca depend de se que tu veux faire apres.

Reply

Marsh Posté le 09-02-2005 à 22:54:12    

simson a écrit :


char data[] = new char[9999999];


 
ben forcément, si tu fixes une taille maximale en dur, faut pas s'attendre a des miracles.
 
ensuite, si tu affiches la trace de l'exception tu auras tout de suite plus d'infos.
 
et enfin, comme dit au dessus, ne lit pas ton fichier en un bloc, mais en plusieurs fois.

Reply

Marsh Posté le 09-02-2005 à 22:57:43    

tu peux faire un truc du genre:
 

Code :
  1. try{
  2. BufferedReader br = new BufferedReader(new FilreReader(file));
  3. String lue = "coincoin";
  4. while (lue != null)
  5. {
  6.   lue = br.readLine();
  7.   // Ici Ajout de lu a ton textarea avec un StringBuffer ou autre
  8. }
  9. br.close();
  10. }catch ...


 
Pour info, une chaîne de caractère Java ne peut pas stocker plus de 65536 caractères (64ko)
Du coup, je pense que ton TextArea ne gérera pas non plus des textes plus grand...
 
(le coup des 64ko, c'était en Java 1.2 et 1.3, j'ai pas essayé depuis)

Reply

Marsh Posté le 09-02-2005 à 23:00:20    

djok_fb a écrit :


Pour info, une chaîne de caractère Java ne peut pas stocker plus de 65536 caractères (64ko)
(le coup des 64ko, c'était en Java 1.2 et 1.3, j'ai pas essayé depuis)


n'importe quoi.
 
même en java 1.1, la taille maximale d'une string dépend de la mémoire disponible.
je doute que tu ais essayé.

Reply

Marsh Posté le 09-02-2005 à 23:01:29    

#  lue = br.readLine();
#   // Ici Ajout de lu a ton textarea avec un StringBuffer ou autre
 
 
super .... et si lue == null ...

Reply

Marsh Posté le 09-02-2005 à 23:01:34    

pour enfoncer le clou, les caractères d'une chaines sont encodés sur plus d'un octet.
 
je t'invite a lire cet excellent topic :  
http://forum.hardware.fr/hardwaref [...] 8627-1.htm

Reply

Marsh Posté le 10-02-2005 à 09:13:09    

surtout que y'a mmap en java maintenant, donc plus besoin de s'emmerder à faire un chargement progressif à la main.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 10-02-2005 à 11:29:38    

Taz a écrit :

#  lue = br.readLine();
#   // Ici Ajout de lu a ton textarea avec un StringBuffer ou autre
 
 
super .... et si lue == null ...


je vais tout lui écrire...
si lue == null, c'est à lui de voir...

Reply

Marsh Posté le 10-02-2005 à 11:29:38   

Reply

Marsh Posté le 10-02-2005 à 11:32:05    

lorill a écrit :

n'importe quoi.
 
même en java 1.1, la taille maximale d'une string dépend de la mémoire disponible.
je doute que tu ais essayé.


Ben si malheureusement, j'ai essayé puisque ça m'a bien emmerdé...c'était p'tre un bug d'une version donnée de Java mais je n'ai pas pu mettre plus de 65000caractères dans un String.
Les 64Ko,c'est pour des caract ASCII a la source (genre un fichier texte tout pourri), je sais bien qu'en java 1 car c'est différent de 1octet...
 
gneuh ;)

Reply

Marsh Posté le 10-02-2005 à 11:34:31    

djok_fb a écrit :

je sais bien qu'en java 1 car c'est différent de 1octet...
 
gneuh ;)


Pas que en Java ;) C'est dès que t'as des String encodées en Unicode :)

Reply

Marsh Posté le 10-02-2005 à 11:36:24    

FlorentG a écrit :

Pas que en Java ;) C'est dès que t'as des String encodées en Unicode :)


Oui, mais là, on parle Java ;)

Reply

Marsh Posté le 10-02-2005 à 11:43:46    

djok_fb, dans ton exemple, la boucle est mal agencée.
 

Code :
  1. while ((lue = br.readLine()) != null)


 
est correct.
 
De plus, on ne met pas le br.close() dans le bloc try, mais bien dans le bloc finally. Le br.close() est alors dans un bloc tray/catch qui lui est propre, avec test préalable br!=null.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 10-02-2005 à 11:44:31    

djok_fb a écrit :

je vais tout lui écrire...
si lue == null, c'est à lui de voir...


je dis juste que ta boucle est pourrie, tu peux pas faire
 
while((s = machin.readLine()) != null) comme tout le monde ?

Reply

Marsh Posté le 10-02-2005 à 12:14:06    

euh si...mais j'attaquais ma 16ieme heure de boulot, je commençais à fatiguer

Reply

Marsh Posté le 10-02-2005 à 12:19:47    

djok_fb a écrit :

Ben si malheureusement, j'ai essayé puisque ça m'a bien emmerdé...c'était p'tre un bug d'une version donnée de Java mais je n'ai pas pu mettre plus de 65000caractères dans un String.


j'ai essayé aussi et j'ai  pu mettre plusieur mega dedans sans soucis  [:sinclaire]

Reply

Marsh Posté le 10-02-2005 à 12:22:32    

vous m'inquiétez avec vos chaînes de 65000 caratères, vous utilisez quoi comme algos et structures de données ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 10-02-2005 à 12:23:10    

enfin, au moins on sait pourquoi "java c'est lent"


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 10-02-2005 à 12:23:52    

snif, j'ai dû merder à l'époque... :(

Reply

Sujets relatifs:

Leave a Replay

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