IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Lecture données importantes dans tableau


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Par défaut Lecture données importantes dans tableau
    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:
    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;
    	}
    Path est le chemin ou sont contenue les fichiers et filename le debut du nom des fichiers.

    voici l'erreur que j'ai à la lecture du 2077 lignes:
    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)
    je n'arrive pas à trouvé mon erreur. si on regarde le gestionnaire des taches de windows on ne voit pas de fuite de memoire.

    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?
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Par défaut la JVM se lance en réservant 64 Mo de mémoire. En dépassant cette limite tu provoque l'exception java.lang.OutOfMemoryError.
    Pour palier ce problème tu peux passer des paramètres au lancement de la JVM :
    • Xms<size> : taille initiale de la mémoire réservée à la JVM
    • Xmx<size> : taille maximale de la mémoire réservée à la JVM
    Par exemple
    java -Xms256m - Xmx512m MyClass
    lance une JVM qui utilise 256 Mo et peut utiliser jusqu'à 512 Mo en cas de besoin
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. Bug saisie de données userform dans tableau
    Par misterW dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/02/2015, 21h38
  2. [XL-2013] Problème copie données calulées dans tableau en VBA
    Par joel50 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/10/2014, 08h47
  3. Lecture données Applet dans ma Servlet
    Par Walmas dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 20/11/2011, 20h39
  4. Filtre données positives dans tableau
    Par benidget dans le forum QlikView
    Réponses: 6
    Dernier message: 16/12/2010, 08h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo