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

Résolu
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012 - 8 juil. 2007 à 10:25
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010 - 8 juil. 2007 à 20:26
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

daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012
8 juil. 2007 à 20:13
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.
3
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
8 juil. 2007 à 10:50
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/
0
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012
8 juil. 2007 à 11:00
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
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
8 juil. 2007 à 11:48
essaiez:
if (i>-1)
{
   br.reset();
   ajouterMot(f,fr,br);
 }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
8 juil. 2007 à 11:50
Ps: du coup à quoi sert l'argument FileReader ?
http://kysicurl.free.fr/
0
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012
8 juil. 2007 à 19:06
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
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
8 juil. 2007 à 19:26
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 ?
0
daviddubois Messages postés 92 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 janvier 2012
8 juil. 2007 à 19:35
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.
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
8 juil. 2007 à 20:09
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/
0
cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
8 juil. 2007 à 20:26
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.
0
Rejoignez-nous