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

avec Java Discussion :

Il ne trouve pas ma variable


Sujet :

avec Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2013
    Messages : 73
    Par défaut Il ne trouve pas ma variable
    Bonjour,

    J'apprends le langage Java et je fais quelques petits programmes pour le tester.

    Je sais qu'il existe des programmes tout fait, qui suit, mais je les écrit pour m'entrainer à ce nouveau langage.

    J'arrive plus ou moins à me débrouiller, mais là je ne comprends pas du tout.

    La ligne "while ((ligne = lecture.readLine()) != null)" me donne une erreur "lecture cannot be resolved" en pré compilation.

    Je fais pourtant appel à la classe FichierTxt que j'importe dans ma classe principale et ma classe FichierTxt est bien compilé sans pb en FichierTxt.class


    Classe principale TestFichierTxt :

    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
     
    import fr.pl.fictxt.FichierTxt;
     
    import java.io.BufferedReader;
    import java.io.FileReader;
     
    public class TestFichierTxt {
     
       public static void main(String[] args) {
     
    	  String ligne;
     
          FichierTxt ficTxt = new FichierTxt("C:\\Users\\Patrick\\Test.txt");
          if (ficTxt.ouvreEnLecture ()) {
        	 while ((ligne = lecture.readLine()) != null)    //  ERREUR lecture cannot be resolved
        	        System.out.println(ligne);
          }
          ficTxt.fermeEnLecture();
       }
     
    }
    Classe FichierTxt :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    package fr.pl.fictxt;
     
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.FileNotFoundException;
    import java.io.IOException;
     
    public class FichierTxt {
       private String fichier = "";
       private BufferedReader lecture = null;
       private BufferedWriter ecriture = null;
     
       // Constructeur
       public FichierTxt (String nomFic) {
    	  this.fichier = nomFic;
       }
     
       // Ouverture du fichier en lecture
       public boolean ouvreEnLecture() {
     
    	  try {
    		  lecture = new BufferedReader(new FileReader(this.fichier));
    		  return true;
    	  }
    	    catch(FileNotFoundException exc) {
    		   System.out.println("Erreur d'ouverture en lecture");
    	    } 
    	    return false;
       }
     
       // Fermeture du fichier en lecture
       public void fermeEnLecture() {
    	  try {
    		 lecture.close();
    	  }
    	    catch (IOException e) {
    	      System.out.println("Erreur de fermeture " + e);
    	   }
       }
     
       // Ouverture du fichier en écriture
       public boolean ouvreEnEcriture() {
     
    	  try {
    		  ecriture = new BufferedWriter(new FileWriter(this.fichier));
    		  return true;
    	  }
    	    catch(IOException e) {
    		   System.out.println("Erreur d'ouverture en éciture");
    	    } 
    	    return false;
       }
     
       // Fermeture du fichier en écriture
       public void fermeEnEcriture() {
    	  try {
    		 ecriture.close();
    	  }
    	    catch (IOException e) {
    	      System.out.println("Erreur de fermeture " + e);
    	   }
       }
    }
    Vous pouvez me dire ce qui se passe, mon appel n'est il pas le bon, j'ai oublié quelque chose ?? je voudrais comprendre.

    Merci beaucoup de vos réponses.
    Cordialement.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par theo16 Voir le message
    La ligne "while ((ligne = lecture.readLine()) != null)" me donne une erreur "lecture cannot be resolved" en pré compilation.

    Je fais pourtant appel à la classe FichierTxt que j'importe dans ma classe principale et ma classe FichierTxt est bien compilé sans pb en FichierTxt.class
    Ben oui, mais la variable lecture est dans la classe FichierTxt, pas dans la classe TestFichierTxt. Comment peut-il savoir où aller chercher cette variable si tu le lui dis pas ? Un programme Java typique a jamais moins d'un bon millier de classes.

    Une idée serait d'ajouter une méthode, getLecture(), à ta classe FichierTxt, qui renvoie la variable lecture.

    * Pour les plus avancés : non. Une idée serait que la méthode ouvreEnLecture() renvoie directement le BufferedReader au lieu d'un boolean. Si l'ouverture échoue il faut lever une IOException, donc il y a pas besoin de dire si ça a réussi ou échoué : ça a réussi puisqu'il n'y a pas eu d'exception. Et les méthodes fermer() deviennent inutiles, il faut fermer directement le BufferedReader ou le BufferedWriter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2013
    Messages : 73
    Par défaut
    Merci, je viens de rajouter une méthode "public BufferedReader getLecture ()" qui me fait un "return lecture;" mais çà ne change pas à mon erreur, j'ai la même,

    j'ai rajouté "private BufferedReader lecture;" dans la classe principale, cela me donne une erreur, et en faisant lecture. j'ai bien la proposition de readline(), mais toujours la même erreur.

    Que se passe t il encore ?

    Je vais peut être essayer la solution qui renvoie directement le BufferedReader !!

    Merci beaucoup de vos réponses.
    Cordialement.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par theo16 Voir le message
    Merci, je viens de rajouter une méthode "public BufferedReader getLecture ()" qui me fait un "return lecture;" mais çà ne change pas à mon erreur, j'ai la même,
    Euh, oui. Ce n'est pas tout de rajouter une méthode. Il faut aussi l'appeler sinon elle ne sert à rien. Tout comme tes méthodes ouvreEnLecture(), ouvreEnEcriture(), fermeEnLecture() et fermeEnEcriture() ne servent à rien si tu ne les appelles pas.

    Citation Envoyé par theo16 Voir le message
    j'ai rajouté "private BufferedReader lecture;" dans la classe principale, cela me donne une erreur, et en faisant lecture. j'ai bien la proposition de readline(), mais toujours la même erreur.
    Cette variable n'est pas celle que tu veux, c'est juste une nouvelle variable que tu as créée et que tu n'as pas initialisée, donc une variable qui ne sert à rien.
    Ce que tu veux, c'est la variable qui vient de FichierTxt. Il faut aller la chercher là.

    Citation Envoyé par theo16 Voir le message
    Je vais peut être essayer la solution qui renvoie directement le BufferedReader !!
    C'est évidemment mieux de faire ça que de s'embêter à couper les cheveux en quatre. Mais tu es débutant, le plus important n'est pas de faire ce que ferait quelqu'un qui a tout compris. Le plus important est de comprendre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2013
    Messages : 73
    Par défaut
    Bonjour,

    Voilà ma modif et çà marche :

    J'ai rajouté dans FichierTxt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       public BufferedReader getLecture () {
    	  return this.lecture;
       }
    et la modification dans TestFichierTxt :

    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
     
    import fr.pl.fictxt.FichierTxt;
     
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
     
    public class TestFichierTxt {
     
       public static void main(String[] args) {
    	  BufferedReader lecture;
     
    	  String ligne;
     
          FichierTxt ficTxt = new FichierTxt("C:\\Users\\Patrick\\Test.txt");
          if (ficTxt.ouvreEnLecture ()) {
        	 lecture = ficTxt.getLecture();
        	 try {
            	 while ((ligne = lecture.readLine()) != null)  
         	        System.out.println(ligne);   		 
        	 }
        	   catch (IOException e) {
        		    System.out.println("Erreur de lecture " + e);
        	   }
          }
          ficTxt.fermeEnLecture();
       }
    }
    J'ai rajouté le try/catch sur le while car autrement j'avais une erreur, j'ai pas compris, mais avec çà marche, pourquoi ?

    Merci de votre aide.
    Bon dimanche

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Il est toujours possible d'avoir une erreur d'I/O en lisant des fichiers et d'autres flux, et Java remonte ce genre d'erreurs avec le mécanisme des exceptions, ici IOException.
    (Cas le plus évident : le fichier n'existe pas ou a été effacé entre-temps. Cas moins évident : les secteurs du disque sont endommagés et il n'est pas possible de lire la portion qui contient le fichier.)

    Comme cela peut toujours arriver, Java exige que tu en tiennes compte et que tu décrives ce qui se passe si une erreur de ce genre arrive. Un catch peut faire ça, mais il ne faut pas le faire dns la boucle : si la lecture échoue une fois, c'est que quelque chose s'est mal passé, et essayer de lire à nouveau ne produira pas les résultats voulus.
    Il aurait fallu mettre le try/catch en dehors de la boucle, et même pour englober toute la méthode. Mais tu aurais tout aussi bien pu faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void main(String args[]) throws IOException
    C'est plus simple, et ça dit en gros à Java que s'il y a une IOException dans main(), il doit l'afficher lui-même. Tu es juste au courant du fait que ça peut arriver, car tu l'as dit avec throws.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2013
    Messages : 73
    Par défaut
    Merci encore de votre aide et bon dimanche.

    Cordialement.

Discussions similaires

  1. [2.x] twig et render - Ne trouve pas la variable
    Par mcorgnet dans le forum Symfony
    Réponses: 13
    Dernier message: 20/07/2012, 15h47
  2. verif, si la variable ne se trouve pas dans la bdd
    Par artichaudd dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2012, 13h51
  3. [MySQL] Update SQL qui ne trouve pas mes variables
    Par Actraiser dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 02/06/2011, 00h26
  4. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15

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