Depandance entre 2 classe java

Résolu/Fermé
pedro0077 Messages postés 4 Date d'inscription lundi 2 août 2010 Statut Membre Dernière intervention 6 août 2011 - 2 août 2010 à 14:28
bilbokey Messages postés 114 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 14 avril 2014 - 2 août 2010 à 17:03
salut tout le monde;
mon probleme est le suivant; j'ai 2 classe une qui parcoure les dossier est affiche le fichier choisi ainsi que son path; une autre classe qui lit le fichier choisi est affiche le texte du fichier qu'on a choisi a l'aide de la classe parcourir().

voici la classe ki permet de parcourir les fichiers; qui affiche le lien du fichier

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class graph extends JFrame {
public graph {}
	
	public void parcourir()   {
		
    	// 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
    	JButton button = new JButton("parcourir");
    	contenuFenêtre.add(button);
    	button.addActionListener(new ActionListener(){
    	    public void actionPerformed(ActionEvent e){
    	        JFileChooser chooser = new JFileChooser();
    	        int returnVal = chooser.showOpenDialog(chooser);
    	        if(returnVal == JFileChooser.APPROVE_OPTION) {
    	         String lien_fichier = chooser.getSelectedFile().getPath();
    	           System.out.println("vous voulez ouvrir le fichier : " +
    	                chooser.getSelectedFile().getName());
    	          System.out.println(lien_fichier );
    	        }
    	 
    	    }
    	} );

    	// 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);

	}
	
   }


voici la classe qui permet de lire le fichier passer en parametre
public class lecture extends graph {
       

	public  void main(String args[]){
			graph badr= new graph();
			 badr.parcourir();
			String chaine="";
			String fichier =lien_fichier;
			
			//lecture du fichier texte	
			try{
				InputStream ips=new FileInputStream(fichier); 
				InputStreamReader ipsr=new InputStreamReader(ips);
				BufferedReader br=new BufferedReader(ipsr);
				String ligne;
				while ((ligne=br.readLine())!=null){
					System.out.println(ligne);
					chaine+=ligne+"\n";
				}
				br.close(); 
			}		
			catch (Exception e){
				System.out.println(e.toString());
			}}}


Mon probleme c'est ke j'arrive pas a recupere le fichier pour la lecture de fichier; j'ai essayé avec l'heritage de meme j'ai essayer de mettre les 2 methodes dans une seule classe mais ca marche pas

merci d'avance de votre aide
cordialement
A voir également:

3 réponses

bilbokey Messages postés 114 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 14 avril 2014 11
2 août 2010 à 15:03
Salut,
Il faut mettre une variable dans la classe(en generale on la met en private en java pour eviter son acces n'importe comment et on ajoute un getter(methode pour la recuperer)):


graph:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class graph extends JFrame {
    
        public graph () {}

        private String lien_fichier="";

        public String getlien_fichier() {
            return lien_fichier;
        }

	public void parcourir()   {

    	// 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
    	JButton button = new JButton("parcourir");
    	contenuFenêtre.add(button);
    	button.addActionListener(new ActionListener(){
    	    public void actionPerformed(ActionEvent e){
    	        JFileChooser chooser = new JFileChooser();
    	        int returnVal = chooser.showOpenDialog(chooser);
    	        if(returnVal == JFileChooser.APPROVE_OPTION) {
    	         lien_fichier = chooser.getSelectedFile().getPath();
    	           System.out.println("vous voulez ouvrir le fichier : " +
    	                chooser.getSelectedFile().getName());
    	          System.out.println(lien_fichier );
    	        }

    	    }
    	} );

    	// 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);

	}

   }




lecture:

public class lecture extends graph {


	public static void main(String[] args){
			graph badr= new graph();
			 badr.parcourir();
			String chaine="";
			String fichier =badr.getlien_fichier();

			//lecture du fichier texte
			try{
				InputStream ips=new FileInputStream(fichier);
				InputStreamReader ipsr=new InputStreamReader(ips);
				BufferedReader br=new BufferedReader(ipsr);
				String ligne;
				while ((ligne=br.readLine())!=null){
					System.out.println(ligne);
					chaine+=ligne+"\n";
				}
				br.close();
			}
			catch (Exception e){
				System.out.println(e.toString());
			}}}
0
pedro0077 Messages postés 4 Date d'inscription lundi 2 août 2010 Statut Membre Dernière intervention 6 août 2011
2 août 2010 à 16:36
merci pour votre aide
c'est la meme solution que j'ai essayer mais j'ai une exeption
java.io.FileNotFoundException: 

merci
0
bilbokey Messages postés 114 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 14 avril 2014 11
2 août 2010 à 17:03
ba c'est normale. Il cherche le lien du fichier alors qu'au debut dans swing le nom du fichier est null. soit tu remplace la fonction getlien_fichier() par :

public String getlien_fichier() {
while (lien_fichier=="") {

}
return lien_fichier;
}

Mais c'est un peu a l'arrache, soit dans ton main tu fais:


public static void main(String[] args) throws InterruptedException{
graph badr= new graph();
badr.parcourir();
String chaine="";
String fichier2 ="";

//lecture du fichier texte

while (true) {
String fichier =badr.getlien_fichier();
if (!fichier.equals(fichier2)) {
fichier2=fichier;
try{
InputStream ips=new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String ligne;
while ((ligne=br.readLine())!=null){
System.out.println(ligne);
chaine+=ligne+"\n";
}
br.close();
}
catch (Exception e){
System.out.println("hello");
System.out.println(e.toString());
}

}
Thread.currentThread();
Thread.sleep(2000);
}
}
}

Ou tu peux inover. le truc il faut pas que quand il ouvre le fichier, celui-ci soit a nulle. Ou le mieu serait de faire faire implementer graph le patern observable si c'est vraiment important:
https://openclassrooms.com/fr/courses
et tu check quand la variable lien_fichier est modifiee
0