La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les argu

Résolu
Signaler
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012
-
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010
-
Bonjour tout le monde,

Je recherche une partie de phrase dans un fichier txt.

Si cette partie de phrase existe, i est incrémenté de 1 autrement i ne bouge pas.

Si i est supérieur à -1, une méthode est appelée et je lui donne en argument le File, le FileReader et le BufferedReader.

Etrangement, quand je lui passe les arguments, la méthode ne me donne pas le résultat voulu, c'est à dire que la méthode ne lit pas lignes du fichier txt dans la boucle while par contre, quand je déclare à nouveau le file, le fr et le br dans ma nouvelle méthode, le résultat est correcte, la boucle while lit les lignes du txt, on dirait que les références du fichiers txt ne sont pas envoyées avec l'appel de la méthode sauriez-vous me dire ce qu'il se passe ?

Je vous laisse premièrement mon code en donnant les arguments, ensuite le code sans les arguments.

C'est vraiment important pour moi de comprendre car j'ai un examen de passage en août.

Merci d'avance pour votre aide.

beegees

Code en envoyant les arguments à la méthode (ça ne fonctionne pas):

import java.io.*;
public class bidon
{
 public static void main (String [] args) throws IOException
 {
  File f = new File("c:\\bidon.txt");
  FileReader fr = new FileReader(f);
  BufferedReader br = new BufferedReader(fr);
  
  String aRechercher = "SET PATH";
  String ligne = "";
  int i=-1;
  
  while ((ligne=br.readLine())!=null)
  {
   System.out.println(ligne);
   
   if(ligne.indexOf(aRechercher)!=-1)
   {
    //System.out.println("ligne.indexOf(aRechercher vaut " + ligne.indexOf(aRechercher));
    System.out.println("trouve !");
    i++;
    System.out.println("i vaut " + i);
   }
  }
  
  if (i>-1)
  {
   ajouterMot(f,fr,br);
  }
  
  
  
 }
 
 public static void ajouterMot(File f, FileReader fr, BufferedReader br)throws IOException
 {
  File f2 = new File("c:\\bidon2.txt");
  FileWriter fw = new FileWriter(f2);
  BufferedWriter bw = new BufferedWriter(fw);
  String aRechercher = "SET PATH";
  
  String ligne = "";
  int i=0;
  while ((ligne = br.readLine())!=null)
  {
   System.out.println("ligne vaut "+ligne);
   i++;
   if (ligne.indexOf(aRechercher)!=-1)
   {
    ligne+= "bidon;";
    bw.write(ligne);
    bw.newLine();
   }
   else
   {
    bw.write(ligne);
    bw.newLine();
   }
  }
  System.out.println("i vaut " + i);
  bw.close();
  
 }
}

code sans les arguments, je les crée dans la nouvelle méthode (et ça fonctionne)
import java.io.*;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

public class bidon

{

            public static void main (String [] args) throws IOException

            {

                        File f = new File("c:\\bidon.txt");

                        FileReader fr = new FileReader(f);

                        BufferedReader br = new BufferedReader(fr);

                       

                        String aRechercher = "SET PATH";

                        String ligne = "";

                        int i=-1;

                       

                        while ((ligne=br.readLine())!=null)

                        {

                                   System.out.println(ligne);

                                  

                                   if(ligne.indexOf(aRechercher)!=-1)

                                   {

                                               //System.out.println("ligne.indexOf(aRechercher vaut " + ligne.indexOf(aRechercher));

                                               System.out.println("trouve !");

                                               i++;

                                               System.out.println("i vaut " + i);

                                   }

                        }

                       

                        if (i>-1)

                        {

                                   ajouterMot();

                        }

                       

                       

                       

            }

           

            public static void ajouterMot()throws IOException

            {

                       

                        File f = new File("c:\\bidon.txt");

                        FileReader fr = new FileReader(f);

                        BufferedReader br = new BufferedReader(fr);

                       

                        File f2 = new File("c:\\bidon2.txt");

                        FileWriter fw = new FileWriter(f2);

                        BufferedWriter bw = new BufferedWriter(fw);

                        String aRechercher = "SET PATH";

                       

                        String ligne = "";

                        int i=0;

                        while ((ligne = br.readLine())!=null)

                        {

                                   System.out.println("ligne vaut "+ligne);

                                   i++;

                                   if (ligne.indexOf(aRechercher)!=-1)

                                   {

                                               ligne+= ";c:\bidon;";

                                               bw.write(ligne);

                                               bw.newLine();

                                   }

                                   else

                                   {

                                               bw.write(ligne);

                                               bw.newLine();

                                   }

                        }

                        System.out.println("i vaut " + i);

                        bw.close();

                       

            }

}

10 réponses

Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Re,

Merci pour votre dévouement.

Ce code ressemble au mien, on est donc sur l amême longueur d'onde

Merci encore pour tout, je vais accepter votre réponse.

Deux questions :

Le fait d'accepter votre réponse vous donne des points ?

Il n'y a pas de balise de code sur ce forum ?

Merci et bonne soirée.
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

Salut,
en fait ce qu'il faut comprendre c'est la notion de flot.
Quand vous ouvrez un flot sur un fichier, vous lisez les caractères un à un (ou les lignes), dans l'ordre où ils sont, jusqu'à la fin du fichier.
Dans votre première méthode vous lisez donc une première fois tout le flot jusqu'à ce qu'il renvoit null (fin du fichier), puis vous appellez votre méthode et essaiez de lire le même flot (qui vous renvoit donc toujours null puisque vous êtes toujours à la fin du fichier).
Dans la deuxième, vous ouvrez un nouveau flot sur le fichier, donc pas de problème.
Voilà, j'espère vous avoir aider à comprendre.

http://kysicurl.free.fr/
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Bonjour,

Merci pour votre réponse.

Il faut donc retourner à la première ligne du fichier txt  avant d'appeler la méthode avec l'envoi d'arguments ?

Merci encore pour votre aide.

David
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

essaiez:
if (i>-1)
{
   br.reset();
   ajouterMot(f,fr,br);
 }
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

Ps: du coup à quoi sert l'argument FileReader ?
http://kysicurl.free.fr/
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Rebonjour,

J'ai testé ce que vous m'avez conseillé, et voici ce que cela donne :

SET windir=C:\WINDOWS
SET PATH=C:\WINDOWS;c:\bidon;
trouve !
Exception in thread "main" java.io.IOException: Stream not marked
        at java.io.BufferedReader.reset(BufferedReader.java:485)
        at bidon2.main(bidon2.java:40)
Press any key to continue...

Qu'en pensez-vous ?

Merci encore
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

Salut, oui c'est normal, en fait reset reprend le flux à la dernière position marquée,
faudrait faire
BufferedReader br = new BufferedReader(fr);
br.mark(100000000);
au début mais c'est vraiment pas propre, non, là le mieux c'est vraiment de fermer le premier flot et dans rouvrir un.
Votre deuxième méthode fonctionne ?
Si oui, pourquoi ne pas la conservée et faire une fonction avec un seul paramètre File (puisqu'il me semble que vous voulez reparcourir entièrement tout le fichier).
Arpès la question est qu'est ce que doit faire votre code exactement ?
Messages postés
93
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 janvier 2012

Re,


Je réponds à vos questions :



Votre deuxième méthode fonctionne ?


Oui elle fonctionne très bien.

Si oui, pourquoi ne pas la conservée et faire une fonction avec un seul paramètre File

Comment feriez-vous cela ?

 que doit faire votre code exactement ?

C'est un exercice de révision pour mon (seul) examen de passage.

Je fait des études supérieurs et je me suis planté en JAVA car je n'avais pas compris certains concept des File.

Merci pour tout.
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

J'ai pas tester, mais ce que je veux dire c'est ça (rouvrir les readers dans la méthode):
import java.io.*;
public class bidon
{
 public static void main (String [] args) throws IOException
 {
  File f = new File("c:\\bidon.txt");
  FileReader fr = new FileReader(f);
  BufferedReader br = new BufferedReader(fr);
  
  String aRechercher = "SET PATH";
  String ligne = "";
  int i=-1;
  
  while ((ligne=br.readLine())!=null)
  {
   System.out.println(ligne);
   
   if(ligne.indexOf(aRechercher)!=-1)
   {
    //System.out.println("ligne.indexOf(aRechercher vaut " + ligne.indexOf(aRechercher));
    System.out.println("trouve !");
    i++;
    System.out.println("i vaut " + i);
   }
  }
  
  if (i>-1)
  {
   ajouterMot(f,fr,br);
  }
  
  
  
 }
 
 public static void ajouterMot(File f)throws IOException
 {
  File f2 = new File("c:\\bidon2.txt");
  FileWriter fw = new FileWriter(f2);
  BufferedWriter bw = new BufferedWriter(fw);
  FileReader fr = new FileReader(f);

  BufferedReader br = new BufferedReader(fr);
  String aRechercher = "SET PATH";
  
  String ligne = "";
  int i=0;
  while ((ligne = br.readLine())!=null)
  {
   System.out.println("ligne vaut "+ligne);
   i++;
   if (ligne.indexOf(aRechercher)!=-1)
   {
    ligne+= "bidon;";
    bw.write(ligne);
    bw.newLine();
   }
   else
   {
    bw.write(ligne);
    bw.newLine();
   }
  }
  System.out.println("i vaut " + i);
  bw.close();
  
 }
}
http://kysicurl.free.fr/
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

Ce code ressemble au mien > c'est normal, j'ai fait un copier coller, j'ai juste rajouter deux lignes pour que vous compreniez ce que je voulais dire
Le fait d'accepter votre réponse vous donne des points ?> non, ça permet juste de voir directement que le problème est résolu (donc pas besoins de lire tout le sujet pour savoir si on peux aider), et si quelqu'un à le même problème il trouve directement la bonne solution.
Il n'y a pas de balise de code sur ce forum ? > je crois que non malheureusement, mais on peux utiliser de la couleur  (ce que j'essaie de faire quand j'y penses) ou autre mise en forme.