cs_pedro0077
Messages postés3Date d'inscriptionsamedi 23 mai 2009StatutMembreDernière intervention 3 août 2010
-
3 août 2010 à 12:16
kaloway
Messages postés358Date d'inscriptionjeudi 24 octobre 2002StatutMembreDernière intervention13 avril 2020
-
3 août 2010 à 12:46
salut tout le monde ;
mon probleme c'est ke j'ai un programe ki marche b1 mais qui consomme beaucoup en memoire (la moitié) peut etre ke la boucle while qui cause le probleme!!!
voici les 2 classes
classe extraction qui permet de parcourir un fichier est de le lire
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.* ;
public class extraction
{
String fichierPath="";
String chaine="";
public String getChaine() {
return chaine;
}
// Méthode de choix d'un fichier
public void choisir() {
// Crée un panneau
JPanel contenuFenêtre = new JPanel();
// Affecte un gestionnaire de présentation à ce panneau
GridLayout disposition = new GridLayout(4,2);
contenuFenêtre.setLayout(disposition);
// Crée les contrôles en mémoire
// Ajoute les contrôles au panneau
// Crée le cadre et y ajoute le panneau
JFrame cadre = new JFrame("Boutton parcourir");
cadre.setContentPane(contenuFenêtre);
// Affecte ses dimensions à la fenêtre et la rend visible
cadre.setSize(400,100);
cadre.setVisible(true);
JButton lancer = new JButton("parcourir");
contenuFenêtre.add(lancer);
//Action sur le bouton
lancer.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e){
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showOpenDialog(chooser);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("Vous avez choisi le fichier : " +
chooser.getSelectedFile().getName());
fichierPath = chooser.getSelectedFile().getAbsolutePath();
System.out.println("le lien du fichier est : "+ fichierPath);
String ligne="" ;
System.out.println ("*** debut du fichier ***");
BufferedReader entree = null;
try {
entree = new BufferedReader (new FileReader (fichierPath));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
do
{ try {
ligne = entree.readLine() ;
} catch (IOException e1) {
e1.printStackTrace();
}
if (ligne != null) {System.out.println (ligne) ;
chaine+=ligne+"\n";}
}
while (ligne != null) ;
//System.out.println (chaine) ;
try {
entree.close() ;
} catch (IOException e1) {
e1.printStackTrace();
}
System.out.println ("*** fin du fichier ***");
}
}
} );
}
}
classe maine qui permet de retourner des valeurs a l'aide de regex a partir du fichier
import java.util.*;
import java.util.regex.*;
import java.io.*;
public class main extends extraction {
private static Pattern pattern;
private static Matcher matcher;
public static void main (String args[])
{
String chaine2 ="";
extraction lecture = new extraction() ;
lecture.choisir();
while (true) {
String aParser= lecture.getChaine();
if (!aParser.equals(chaine2)) {
chaine2=aParser;
Pattern p=Pattern.compile("(.*?)*#\\{(.*?)\\}#.*?");
Matcher m=p.matcher(aParser);
while(m.find())
System.out.println(m.group(2));
}
}
}}
kaloway
Messages postés358Date d'inscriptionjeudi 24 octobre 2002StatutMembreDernière intervention13 avril 2020 3 août 2010 à 12:46
Le problème est que chaine est un string. La classe string est consommatrice de ressource, surtout quand on concane des chaine. il est préférable d'utiliser les classes stringbuffer ou stringbuidler.