Bonjour,
j'ai un probleme lors de la lecture de donée contenue dans plusieurs fichiers. les données sont stockées dans plusieurs fichiers car il y a une grande quantité de de donnée plusieurs centaines de Mo.
J'utilise la class en fichier joint qui implement une lecture de fichier par la class BufferedReader.
dans mon exemple qui plante, j'ai 40 fichiers de 100 lignes chacun Il y a 2000 valeurs type double sur chaque ligne separées par une vigule. la ligne est terminée pas un retour chariot.
ce que je veux c'est lire l'ensemble des fichiers et de créer un tableau de 4000 element de type String contenant les 4000 lignes.
voici la methode de lecture des données:
Path est le chemin ou sont contenue les fichiers et filename le debut du nom des fichiers.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public String[] Get_Data() throws Exception { String[] Data = new String[0]; ReaderFile ROutputFile; String[] ListF = new File(Path).list(); for (int i=0; i<ListF.length; i++){ if (ListF[i].startsWith(Filename) && ListF[i].endsWith(".dat")){ ROutputFile = new ReaderFile(Path + ListF[i]); try { ROutputFile.Open(); while(!ROutputFile.EOF()){ String[] tmp = new String[Data.length + 1]; for (int id=0; id<Data.length; id++) tmp[id] = Data[id]; Data = null; Data = tmp; Data[Data.length - 1] = ROutputFile.Get_Line(); tmp = null; System.out.println("" + Data.length); if (Data.length == 2077) System.out.println("debug"); } System.out.println(Path + ListF[i]); } catch (Exception e) { //<tbd> } finally{ ROutputFile.Close(); } } } return Data; }
voici l'erreur que j'ai à la lecture du 2077 lignes:
je n'arrive pas à trouvé mon erreur. si on regarde le gestionnaire des taches de windows on ne voit pas de fuite de memoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Unknown Source) at java.lang.String.<init>(Unknown Source) at java.lang.StringBuffer.toString(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at file_manager.ReaderFile.Get_Line(ReaderFile.java:74) at system.project.xmlfile.DatFile.Get_Data(DatFile.java:98)
j'ai essayé de met tot de même des System.gc() pour voir mais ca n'a aucun effet.
Quelqu'un à t'il une idée sur la question?
Partager