Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments [ Divers / Débutant(e) ] (daviddubois)

dimanche 8 juillet 2007 à 10:25:02 | La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

daviddubois

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.*;

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

                       

            }

}




dimanche 8 juillet 2007 à 10:50:04 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

Kysic

Membre Club
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.

[ Lien ]

dimanche 8 juillet 2007 à 11:00:04 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

daviddubois

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


dimanche 8 juillet 2007 à 11:48:26 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

Kysic

Membre Club
essaiez:
if (i>-1)
{
   br.reset();
   ajouterMot(f,fr,br);
 }


dimanche 8 juillet 2007 à 11:50:36 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

Kysic

Membre Club

Ps: du coup à quoi sert l'argument FileReader ?
[ Lien ]

dimanche 8 juillet 2007 à 19:06:37 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

daviddubois

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

dimanche 8 juillet 2007 à 19:26:27 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

Kysic

Membre Club
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 ?

dimanche 8 juillet 2007 à 19:35:38 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

daviddubois

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.


dimanche 8 juillet 2007 à 20:09:08 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

Kysic

Membre Club
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();
  
 }
}
[ Lien ]

dimanche 8 juillet 2007 à 20:13:48 | Re : La méthode appelée fonctionne sans argument mais ne fonctionne pas avec les arguments

daviddubois

Réponse acceptée !
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.





1 2

Cette discussion est classé dans : ligne, file, system, out, arechercher


Répondre à ce message

Sujets en rapport avec ce message

lister une directory [ par raistlyn666 ] bjr a tous,voila je cherche a lister les repertoire en affichant le nom, la derniere date de modif et bq d'autre choses...j'ai deja un debut de code:p pb : commande dos avec l'invite [ par irraxen33 ] Voila j'ai une appliqtion en C (enfin, un batch C) et je voudrais faire une interface graphique pour la lancer.Voila comment ca ce passe sans l'interf empêcher le retour à la ligne d'un system.out.println [ par lafolle24320 ] Bonjour, Est ce que quelqu'un pourrait me donner l'astuce qui permet de ne pas faire de retour à la ligne à la fin d'un System.out.println ?? si c'est Récupération de flux [ par Im a FBI agent ] Bonjour tout le monde,je suis en train de développer une application java en SWT, et j'aimerai récupérer le flux de sortie (System.out) pour l'affiche [ZIP] Zip d'un répertoire contenant des sous rep. [ par alaincnes ] Maintenant que je sais dézipper un fichier avec des sous repertoires... je n'arrive pas à faire l'opération inverse c'est à dire rezipper mon repertoi RSA : Récuperer une paire de Clée bien formée [ par codefalse ] Bonjour à vous ! :)Voila, j'ai un probleme, je penche dessus depuis un moment et je ne trouve pas la solution malgré toutes mes tentatives.Voici ce qu Methode Overriding [ par PY01A0080 ] Bonjour,est ce que ce programme utilise la methode overriding ?J'ai un doute.class Account{int p=4000; int r=9; int t=5;int i=p*r*t;public void calcul problème d'affichage dans un onglet SWT [ par kifouillou ] Bonjour,j'ai un gros problème.Voilà je fais int i = tabFolder.getSelectionIndex(); Reseau et internet [ par felouss ] bonjour,j ai un probleme pour envoyer un gros fichier via UDP,udp ne permet l envoie de paquet > 65kilo,pour cela du coté serveur j ai decoupé le fich Lecteur de glycémie & port Série... [ par Celine788 ] Bonjour à tous, diabétique depuis quelques années, je cherche à me développer une application en JAVA pour me personnaliser mes suivis de glycémie (pl


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.