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

Entrée/Sortie Java Discussion :

Lecture des caracteres à partir d'un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Points : 60
    Points
    60
    Par défaut Lecture des caracteres à partir d'un fichier
    salut a tous
    bon j ai un probleme avec la lecture d'un fichier caractere par caractere puis les copier dans un autre fichier
    j ai
    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
     
    /*POUR ECRIRE DANS UN FICHIER*/
    import java.io.*;
    import java.util.*;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    public class TBW {
      protected String destination;
     
      public TBW(String destination) {
        this.destination = destination;
        traitement();}
     
      public static void main(String args[]) {
        new TBW("function1.c");
      }
     
      private void traitement() { 
        try {
          String ligne ;
     
          BufferedWriter fichier = new BufferedWriter(new FileWriter(destination));
     
          fichier.write("#define INT 1");
          fichier.newLine();
          fichier.write("#define ID 2");
          fichier.newLine();
    		fichier.write("#define OP 3");
          fichier.newLine();
    		fichier.write("int val");
          fichier.newLine();
          fichier.close();
        } catch (Exception e) {
          e.printStackTrace();
        } 
    	 }
    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
    /* POUR LIRE A PARTIR DE FFFF.TXT ET COPIER LE CONTENU DANS AAAA.TXT*/	  
     
     
    public static void copyCharacters() throws IOException { 
    FileReader inputStream = null;
    try { 
    inputStream = new FileReader("FFFF.txt"); 
    int c;
     while ((c = inputStream.read()) != -1) { 
     
    BufferedWriter fichier = new BufferedWriter(new FileWriter("AAAA.txt"));
    fichier.write(c); 
     
    } } finally 
    { 
    if (inputStream != null) { 
    inputStream.close(); } 
     
    } } 
     }
    pour la premier partie ca marche
    mais la deuxieme partie non je ne trouve ni le fichier AAAA.txt ni les caractere dedans
    ou est le probleme
    merci d'avance

  2. #2
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Dans la 2° partie, tu ne fais ni flush, ni close sur ton fichier.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    donc j'ai mis le flush et le close

    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
     
    /* POUR LIRE A PARTIR DE FFFF.TXT ET COPIER LE CONTENU DANS AAAA.TXT*/	  
     
     
    public static void copyCharacters() throws IOException { 
    FileReader inputStream = null;
    try { 
    inputStream = new FileReader("FFFF.txt"); 
    int c;
     while ((c = inputStream.read()) != -1) { 
     
    BufferedWriter fichier = new BufferedWriter(new FileWriter("AAAA.txt"));
    fichier.write(c);
    }
    fichier.flush();
    fichier.close();}
    finally 
    { 
    if (inputStream != null) { 
    inputStream.close();
     
    }}
    }}
    mais ca marche pas

    TBW.java:53: cannot find symbol
    symbol : variable fichier
    location: class TBW
    fichier.flush();
    ^
    TBW.java:54: cannot find symbol
    symbol : variable fichier
    location: class TBW
    fichier.close();}
    ^
    2 errors
    ps: je suis debutante "null" en java

  4. #4
    Membre habitué Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Points : 131
    Points
    131
    Par défaut
    Tu as déclaré ton fichier en sortie dans ta boucle :
    • Pour chaque caractère lu tu déclares et crées le fichier cible !
    • Ton fichier cible devrait être vide, ou ne contenir que le dernier caractère lu.
    • Ensuite, à la fin de la boucle, tu essaies de fermer ton fichier qui n'est plus vu par le compilateur...

    Le code correct est plutôt du genre :
    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
     
    	FileReader inputStream = null;
    	try { 
    		inputStream = new FileReader("FFFF.txt"); 
    		BufferedWriter fichier = new BufferedWriter(new FileWriter("AAAA.txt"));
    		int c;
    		while ((c = inputStream.read()) != -1) { 
     
    			fichier.write(c);
    		}
    		fichier.flush();
    		fichier.close();}
    	finally { 
    		if (inputStream != null) { 
    			inputStream.close();
    		}
    	}
    Remarque : Le flush est inutile avant le close...

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    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
     
    /*POUR ECRIRE DANS UN FICHIER*/
    import java.io.*;
    import java.util.*;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    public class TBW {
    protected String destination;
     
    public TBW(String destination) {
    this.destination = destination;
    traitement();}
    public static void main(String args[]) {
    new TBW("function1.c");
    copyCharacters(); }
     
     
    private void traitement() { 
    try {
          String ligne ;
          BufferedWriter fichier = new BufferedWriter(new FileWriter(destination));fichier.write("#define INT 1");
          fichier.newLine();
          fichier.write("#define ID 2");
          fichier.newLine();
    		fichier.write("#define OP 3");
          fichier.newLine();
    		fichier.write("int val");
          fichier.newLine();
          fichier.close();
        } catch (Exception e) {
          e.printStackTrace();
        } 
    	 }
     
     
    /* POUR LIRE A PARTIR DE FFFF.TXT ET COPIER LE CONTENU DANS AAAA.TXT*/	  
     
     
    public static void copyCharacters() throws IOException { 
    FileReader inputStream = null;
    try { 
      inputStream = new FileReader("FFFF.txt");
      BufferedWriter fichier = new BufferedWriter(new FileWriter("romaroma.txt"));
      int c; 
      while ((c = inputStream.read()) != -1) 
      { fichier.write(c); } 
      fichier.flush(); 
      fichier.close();} 
    finally { if (inputStream != null) { inputStream.close(); } } 
     
     
     
     
    }}
    quand je compile ce programme
    je trouve
    TBW.java:16: unreported exception java.io.IOException; must be caught or declared to be thrown
    copyCharact

  6. #6
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Pour ce genre de problème, la FAQ est ton amie.

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    donc pour le moment j ai resolu le probleme principale il me reste juste une petite erreur


    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
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.*;
    public class F {
    public static void main(String[] args) {
    		  FileInputStream fis;
            FileOutputStream fos;
     
      try {
             //On instancie nos objets. 
            	//fis va lire le fichier et 
            	//fos va écrire dans le nouveau !
    fis = new FileInputStream(new File("lex.txt"));
    fos = new FileOutputStream(new File("generateur.c"));
             //On créer un tableau de byte 
             //pour dire de combien en combien on va lire les données
    byte[] buf = new byte[2];
             //On crée une variable de type int 
             //pour affecter le résultat de la lecture 
             //retourne -1 quand c'est fini
    int n = 0;
    int s= 0 ;
     
                    while((n = fis.read(buf)) >= 0)
                    { 
    					      for(byte bit : buf)
                         System.out.print( (char)bit );
     
    									  if ( (char)bit == '%') { s=s+1;}
    									  else { fos.write(buf);}  
     
                 }
     
     
    					 //On ferme nos flux de données
                    fis.close();
                    fos.close();
                    System.out.println("Copie terminée !");}
     
     
    		  catch (FileNotFoundException e) {e.printStackTrace();} 
    		  catch (IOException e) {e.printStackTrace();}}}
    et l'erreur est :
    F.java:32: cannot find symbol
    symbol : variable bit
    location: class F
    if ( (char)bit == '%') { s=s+1;}
    la petite fleche qui mentionne la faute est sous le symbole ==

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Dans une instruction de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (blabla)
       dotruc();
    doothertruc();
    Seule la première instruction est comprise dans le corps de la boucle for.

    Si tu veux que ta boucle comprenne les deux instructions, il ne faut bien évidemment pas oublier les accolades:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (blabla)
    {
       dotruc();
       doothertruc();
    }

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    meme en ajoutant les {} ca marche pas


    mon idée est de teste le caractere lu si c'est % je ne le copie pas dans le nouveau fichier si non je copie tous les autre caractere

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Ça ne "marche" peut-être toujours pas, mais ça devrait au moins avoir réglé le problème précédent, donc si tu espères de l'aide explique ce qui ne va pas (problème de compilation ? erreur à l'exécution ? résultat obtenu différent du résultat obtenu ?) en donnant les éventuels messages d'erreur.

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    c'est la meme erreur du == meme quan j ai ajouter les {} l'erreur est tjr la

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Alors c'est que tu n'as pas rajouté les accolades au bon endroit... Je pensais qu'il s'agissait d'un bête oubli, mais c'est plus grave que ça Allez, j'explique.

    La variable bit est définie à l'intérieur de la boucle for. Sa portée, ou scope en anglais, est donc restreinte à cette boucle uniquement : la variable nommée "bit" est inconnue à l'extérieur de la boucle, tu ne peux pas l'utiliser.
    Donc pour que le code compile, il faut faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (byte bit : buf)
    {
       System.out.print( (char)bit );
       if ( (char)bit == '%') { s=s+1; }
       else { fos.write(buf); }
    }
    // à partir de maintenant on ne connaît plus "bit"

    Ceci dit, ce n'est peut-être pas exactement ce que tu veux (je n'ai pas bien compris ce que tu cherches à faire), car avec ce code il est possible que tu exécutes 2 fois (autant de fois que tu passe dans la boucle...) l'instruction fos.write(buf). Résultat : si les deux caractères lus à la fois dans l'entrée sont différents de '%' les deux caractères seront copiés deux fois dans la sortie, si l'un des deux caractères est un '%' les deux caractères (y compris le '%') seront copiés dans la sortie, et si les deux sont des '%' rien ne sera copié...

  13. #13
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    merci pour l'expliquation

    ce que j'ai mis est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while((n = fis.read(buf)) >= 0)
                    { 
    					     for (byte bit : buf) {
    			System.out.print( (char)bit ); 
    if ( (char)bit == '%' || (char)bit == '{' || (char) bit == '}') { s=s+1; } 
    			else { fos.write(buf); } }
    ce que je veut c'est:
    quand je lit apartir d'un fichier qui contient un programme en lex
    si je trouve une ligne : %{
    ou : %}
    ou: %%
    je ne copie pas cette ligne
    sinon je copie tout

    ce programme pour la 1 ere ca marche il ne copie pas les %%, %},% {.
    mais pour la 2ieme ca ne marche pas car il copier chaque 2 caractere 2 fois

  14. #14
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    si j'ai bien compris tu veux recopier le fichier en enlevant les ligne contenant "%{", "%}" ou %%
    dans ce cas tu devrais plutot lire ton fichier ligne par ligne et tester les ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(!ligne.match("^.*%[{}%].*$"))
    	{
    	//copier la ligne dans le fichier de sortie.
    	}
    cordialement

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/04/2007, 02h12
  2. Réponses: 8
    Dernier message: 22/08/2006, 12h51
  3. Réponses: 4
    Dernier message: 19/03/2006, 15h20
  4. [C] lecture des n lignes d'un fichier
    Par felicity dans le forum C
    Réponses: 12
    Dernier message: 12/01/2006, 23h12
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05

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