lecture d'un fichier volumineux - Java - Programmation
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.
Marsh Posté le 09-02-2005 à 22:54:12
simson a écrit : |
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.
Marsh Posté le 09-02-2005 à 22:57:43
tu peux faire un truc du genre:
Code :
|
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)
Marsh Posté le 09-02-2005 à 23:00:20
djok_fb 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é.
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 ...
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
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.
Marsh Posté le 10-02-2005 à 11:29:38
Taz a écrit : # lue = br.readLine(); |
je vais tout lui écrire...
si lue == null, c'est à lui de voir...
Marsh Posté le 10-02-2005 à 11:32:05
lorill a écrit : n'importe quoi. |
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
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... |
Pas que en Java C'est dès que t'as des String encodées en Unicode
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
Marsh Posté le 10-02-2005 à 11:43:46
djok_fb, dans ton exemple, la boucle est mal agencée.
Code :
|
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.
Marsh Posté le 10-02-2005 à 11:44:31
djok_fb a écrit : je vais tout lui écrire... |
je dis juste que ta boucle est pourrie, tu peux pas faire
while((s = machin.readLine()) != null) comme tout le monde ?
Marsh Posté le 10-02-2005 à 12:14:06
euh si...mais j'attaquais ma 16ieme heure de boulot, je commençais à fatiguer
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
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 ?
Marsh Posté le 10-02-2005 à 12:23:10
enfin, au moins on sait pourquoi "java c'est lent"
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" );}